[DI] Deprecate autowiring-types in favor of aliases

This commit is contained in:
Nicolas Grekas 2017-02-01 12:51:46 +01:00
parent b4ff1c8767
commit b11d391cb7
44 changed files with 230 additions and 176 deletions

View File

@ -14,6 +14,23 @@ Debug
DependencyInjection DependencyInjection
------------------- -------------------
* Autowiring-types have been deprecated, use aliases instead.
Before:
```xml
<service id="annotations.reader" class="Doctrine\Common\Annotations\AnnotationReader" public="false">
<autowiring-type>Doctrine\Common\Annotations\Reader</autowiring-type>
</service>
```
After:
```xml
<service id="annotations.reader" class="Doctrine\Common\Annotations\AnnotationReader" public="false" />
<service id="Doctrine\Common\Annotations\Reader" alias="annotations.reader" public="false" />
```
* The `Reference` and `Alias` classes do not make service identifiers lowercase anymore. * The `Reference` and `Alias` classes do not make service identifiers lowercase anymore.
* Case insensitivity of service identifiers is deprecated and will be removed in 4.0. * Case insensitivity of service identifiers is deprecated and will be removed in 4.0.

View File

@ -24,6 +24,23 @@ Debug
DependencyInjection DependencyInjection
------------------- -------------------
* Autowiring-types have been removed, use aliases instead.
Before:
```xml
<service id="annotations.reader" class="Doctrine\Common\Annotations\AnnotationReader" public="false">
<autowiring-type>Doctrine\Common\Annotations\Reader</autowiring-type>
</service>
```
After:
```xml
<service id="annotations.reader" class="Doctrine\Common\Annotations\AnnotationReader" public="false" />
<service id="Doctrine\Common\Annotations\Reader" alias="annotations.reader" public="false" />
```
* Service identifiers are now case sensitive. * Service identifiers are now case sensitive.
* The `Reference` and `Alias` classes do not make service identifiers lowercase anymore. * The `Reference` and `Alias` classes do not make service identifiers lowercase anymore.

View File

@ -220,10 +220,9 @@ class JsonDescriptor extends Descriptor
'shared' => $definition->isShared(), 'shared' => $definition->isShared(),
'abstract' => $definition->isAbstract(), 'abstract' => $definition->isAbstract(),
'autowire' => $definition->isAutowired(), 'autowire' => $definition->isAutowired(),
'autowiring_types' => array(),
); );
foreach ($definition->getAutowiringTypes() as $autowiringType) { foreach ($definition->getAutowiringTypes(false) as $autowiringType) {
$data['autowiring_types'][] = $autowiringType; $data['autowiring_types'][] = $autowiringType;
} }

View File

@ -185,7 +185,7 @@ class MarkdownDescriptor extends Descriptor
."\n".'- Autowired: '.($definition->isAutowired() ? 'yes' : 'no') ."\n".'- Autowired: '.($definition->isAutowired() ? 'yes' : 'no')
; ;
foreach ($definition->getAutowiringTypes() as $autowiringType) { foreach ($definition->getAutowiringTypes(false) as $autowiringType) {
$output .= "\n".'- Autowiring Type: `'.$autowiringType.'`'; $output .= "\n".'- Autowiring Type: `'.$autowiringType.'`';
} }

View File

@ -294,8 +294,9 @@ class TextDescriptor extends Descriptor
$tableRows[] = array('Abstract', $definition->isAbstract() ? 'yes' : 'no'); $tableRows[] = array('Abstract', $definition->isAbstract() ? 'yes' : 'no');
$tableRows[] = array('Autowired', $definition->isAutowired() ? 'yes' : 'no'); $tableRows[] = array('Autowired', $definition->isAutowired() ? 'yes' : 'no');
$autowiringTypes = $definition->getAutowiringTypes(); if ($autowiringTypes = $definition->getAutowiringTypes(false)) {
$tableRows[] = array('Autowiring Types', $autowiringTypes ? implode(', ', $autowiringTypes) : '-'); $tableRows[] = array('Autowiring Types', implode(', ', $autowiringTypes));
}
if ($definition->getFile()) { if ($definition->getFile()) {
$tableRows[] = array('Required File', $definition->getFile() ? $definition->getFile() : '-'); $tableRows[] = array('Required File', $definition->getFile() ? $definition->getFile() : '-');

View File

@ -12,6 +12,7 @@
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler; namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface as FrameworkBundleEngineInterface; use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface as FrameworkBundleEngineInterface;
use Symfony\Component\DependencyInjection\Alias;
use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\Templating\EngineInterface as ComponentEngineInterface; use Symfony\Component\Templating\EngineInterface as ComponentEngineInterface;
@ -25,8 +26,8 @@ class TemplatingPass implements CompilerPassInterface
} }
if ($container->hasAlias('templating')) { if ($container->hasAlias('templating')) {
$definition = $container->findDefinition('templating'); $container->setAlias(ComponentEngineInterface::class, new Alias('templating', false));
$definition->setAutowiringTypes(array(ComponentEngineInterface::class, FrameworkBundleEngineInterface::class)); $container->setAlias(FrameworkBundleEngineInterface::class, new Alias('templating', false));
} }
if ($container->hasDefinition('templating.engine.php')) { if ($container->hasDefinition('templating.engine.php')) {

View File

@ -1096,8 +1096,8 @@ class FrameworkExtension extends Extension
->getDefinition('annotations.cached_reader') ->getDefinition('annotations.cached_reader')
->replaceArgument(1, new Reference($cacheService)) ->replaceArgument(1, new Reference($cacheService))
->replaceArgument(2, $config['debug']) ->replaceArgument(2, $config['debug'])
->addAutowiringType(Reader::class)
; ;
$container->setAlias(Reader::class, new Alias('annotations.cached_reader', false));
} else { } else {
$container->removeDefinition('annotations.cached_reader'); $container->removeDefinition('annotations.cached_reader');
} }

View File

@ -5,9 +5,8 @@
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services> <services>
<service id="annotations.reader" class="Doctrine\Common\Annotations\AnnotationReader" public="false"> <service id="annotations.reader" class="Doctrine\Common\Annotations\AnnotationReader" public="false" />
<autowiring-type>Doctrine\Common\Annotations\Reader</autowiring-type> <service id="Doctrine\Common\Annotations\Reader" alias="annotations.reader" public="false" />
</service>
<service id="annotations.cached_reader" class="Doctrine\Common\Annotations\CachedReader" public="false"> <service id="annotations.cached_reader" class="Doctrine\Common\Annotations\CachedReader" public="false">
<argument type="service" id="annotations.reader" /> <argument type="service" id="annotations.reader" />

View File

@ -7,9 +7,9 @@
<services> <services>
<service id="event_dispatcher" class="Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher"> <service id="event_dispatcher" class="Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher">
<argument type="service" id="service_container" /> <argument type="service" id="service_container" />
<autowiring-type>Symfony\Component\EventDispatcher\EventDispatcherInterface</autowiring-type>
<autowiring-type>Symfony\Component\EventDispatcher\EventDispatcher</autowiring-type>
</service> </service>
<service id="Symfony\Component\EventDispatcher\EventDispatcherInterface" alias="event_dispatcher" public="false" />
<service id="Symfony\Component\EventDispatcher\EventDispatcher" alias="event_dispatcher" public="false" />
<service id="http_kernel" class="Symfony\Component\HttpKernel\HttpKernel"> <service id="http_kernel" class="Symfony\Component\HttpKernel\HttpKernel">
<argument type="service" id="event_dispatcher" /> <argument type="service" id="event_dispatcher" />
@ -40,10 +40,8 @@
<argument type="collection" /> <argument type="collection" />
</service> </service>
<service id="service_container" synthetic="true"> <service id="Symfony\Component\DependencyInjection\ContainerInterface" alias="service_container" public="false" />
<autowiring-type>Symfony\Component\DependencyInjection\ContainerInterface</autowiring-type> <service id="Symfony\Component\DependencyInjection\Container" alias="service_container" public="false" />
<autowiring-type>Symfony\Component\DependencyInjection\Container</autowiring-type>
</service>
<service id="kernel" synthetic="true" /> <service id="kernel" synthetic="true" />

View File

@ -17,9 +17,8 @@
<call method="setConfigCacheFactory"> <call method="setConfigCacheFactory">
<argument type="service" id="config_cache_factory" /> <argument type="service" id="config_cache_factory" />
</call> </call>
<autowiring-type>Symfony\Component\Translation\TranslatorInterface</autowiring-type>
</service> </service>
<service id="Symfony\Component\Translation\TranslatorInterface" alias="translator" public="false" />
<service id="translator.logging" class="Symfony\Component\Translation\LoggingTranslator" public="false"> <service id="translator.logging" class="Symfony\Component\Translation\LoggingTranslator" public="false">
<argument type="service" id="translator.logging.inner" /> <argument type="service" id="translator.logging.inner" />

View File

@ -11,7 +11,6 @@
"shared": true, "shared": true,
"abstract": true, "abstract": true,
"autowire": false, "autowire": false,
"autowiring_types": [],
"file": null, "file": null,
"factory_class": "Full\\Qualified\\FactoryClass", "factory_class": "Full\\Qualified\\FactoryClass",
"factory_method": "get", "factory_method": "get",

View File

@ -3,9 +3,9 @@
Information for Service "service_1" Information for Service "service_1"
=================================== ===================================
------------------ ----------------------------- ---------------- -----------------------------
 Option   Value   Option   Value 
------------------ ----------------------------- ---------------- -----------------------------
Service ID service_1 Service ID service_1
Class Full\Qualified\Class1 Class Full\Qualified\Class1
Tags - Tags -
@ -15,7 +15,6 @@
Shared yes Shared yes
Abstract yes Abstract yes
Autowired no Autowired no
Autowiring Types -
Factory Class Full\Qualified\FactoryClass Factory Class Full\Qualified\FactoryClass
Factory Method get Factory Method get
------------------ ----------------------------- ---------------- -----------------------------

View File

@ -11,7 +11,6 @@
"shared": true, "shared": true,
"abstract": false, "abstract": false,
"autowire": false, "autowire": false,
"autowiring_types": [],
"file": "\/path\/to\/file", "file": "\/path\/to\/file",
"factory_service": "factory.service", "factory_service": "factory.service",
"factory_method": "get", "factory_method": "get",

View File

@ -3,9 +3,9 @@
Information for Service "service_2" Information for Service "service_2"
=================================== ===================================
------------------ --------------------------------- ----------------- ---------------------------------
 Option   Value   Option   Value 
------------------ --------------------------------- ----------------- ---------------------------------
Service ID service_2 Service ID service_2
Class Full\Qualified\Class2 Class Full\Qualified\Class2
Tags tag1 (attr1: val1, attr2: val2) Tags tag1 (attr1: val1, attr2: val2)
@ -18,8 +18,7 @@
Shared yes Shared yes
Abstract no Abstract no
Autowired no Autowired no
Autowiring Types -
Required File /path/to/file Required File /path/to/file
Factory Service factory.service Factory Service factory.service
Factory Method get Factory Method get
------------------ --------------------------------- ----------------- ---------------------------------

View File

@ -14,7 +14,6 @@
], ],
"autowire": false, "autowire": false,
"autowiring_types": [],
"arguments": [ "arguments": [
{ {
"type": "service", "type": "service",
@ -29,7 +28,6 @@
"shared": true, "shared": true,
"abstract": false, "abstract": false,
"autowire": false, "autowire": false,
"autowiring_types": [],
"arguments": [ "arguments": [
"arg1", "arg1",
"arg2" "arg2"

View File

@ -13,8 +13,7 @@
"tags": [ "tags": [
], ],
"autowire": false, "autowire": false
"autowiring_types": []
} }
}, },
"aliases": { "aliases": {

View File

@ -13,8 +13,7 @@
"tags": [ "tags": [
], ],
"autowire": false, "autowire": false
"autowiring_types": []
}, },
"definition_2": { "definition_2": {
"class": "Full\\Qualified\\Class2", "class": "Full\\Qualified\\Class2",
@ -50,8 +49,7 @@
"calls": [ "calls": [
"setMailer" "setMailer"
], ],
"autowire": false, "autowire": false
"autowiring_types": []
} }
}, },
"aliases": { "aliases": {

View File

@ -34,8 +34,7 @@
"calls": [ "calls": [
"setMailer" "setMailer"
], ],
"autowire": false, "autowire": false
"autowiring_types": []
} }
}, },
"aliases": [ "aliases": [

View File

@ -13,8 +13,7 @@
], ],
"factory_service": "factory.service", "factory_service": "factory.service",
"factory_method": "get", "factory_method": "get",
"autowire": false, "autowire": false
"autowiring_types": []
} }
], ],
"tag2": [ "tag2": [
@ -31,8 +30,7 @@
], ],
"factory_service": "factory.service", "factory_service": "factory.service",
"factory_method": "get", "factory_method": "get",
"autowire": false, "autowire": false
"autowiring_types": []
} }
] ]
} }

View File

@ -11,6 +11,5 @@
"tags": [ "tags": [
], ],
"autowire": false, "autowire": false
"autowiring_types": []
} }

View File

@ -1,6 +1,6 @@
------------------ ----------------------------- ---------------- -----------------------------
 Option   Value   Option   Value 
------------------ ----------------------------- ---------------- -----------------------------
Service ID - Service ID -
Class Full\Qualified\Class1 Class Full\Qualified\Class1
Tags - Tags -
@ -10,8 +10,7 @@
Shared yes Shared yes
Abstract yes Abstract yes
Autowired no Autowired no
Autowiring Types -
Factory Class Full\Qualified\FactoryClass Factory Class Full\Qualified\FactoryClass
Factory Method get Factory Method get
------------------ ----------------------------- ---------------- -----------------------------

View File

@ -32,6 +32,5 @@
"calls": [ "calls": [
"setMailer" "setMailer"
], ],
"autowire": false, "autowire": false
"autowiring_types": []
} }

View File

@ -1,6 +1,6 @@
------------------ --------------------------------- ----------------- ---------------------------------
 Option   Value   Option   Value 
------------------ --------------------------------- ----------------- ---------------------------------
Service ID - Service ID -
Class Full\Qualified\Class2 Class Full\Qualified\Class2
Tags tag1 (attr1: val1, attr2: val2) Tags tag1 (attr1: val1, attr2: val2)
@ -13,9 +13,8 @@
Shared yes Shared yes
Abstract no Abstract no
Autowired no Autowired no
Autowiring Types -
Required File /path/to/file Required File /path/to/file
Factory Service factory.service Factory Service factory.service
Factory Method get Factory Method get
------------------ --------------------------------- ----------------- ---------------------------------

View File

@ -6,7 +6,6 @@
"shared": true, "shared": true,
"abstract": true, "abstract": true,
"autowire": false, "autowire": false,
"autowiring_types": [],
"arguments": [ "arguments": [
{ {
"type": "service", "type": "service",
@ -21,7 +20,6 @@
"shared": true, "shared": true,
"abstract": false, "abstract": false,
"autowire": false, "autowire": false,
"autowiring_types": [],
"arguments": [ "arguments": [
"arg1", "arg1",
"arg2" "arg2"

View File

@ -1,6 +1,6 @@
------------------ ----------------------------- ---------------- -----------------------------
 Option   Value   Option   Value 
------------------ ----------------------------- ---------------- -----------------------------
Service ID - Service ID -
Class Full\Qualified\Class1 Class Full\Qualified\Class1
Tags - Tags -
@ -10,11 +10,10 @@
Shared yes Shared yes
Abstract yes Abstract yes
Autowired no Autowired no
Autowiring Types -
Factory Class Full\Qualified\FactoryClass Factory Class Full\Qualified\FactoryClass
Factory Method get Factory Method get
Arguments Service(definition2) Arguments Service(definition2)
%parameter% %parameter%
Inlined Service Inlined Service
------------------ ----------------------------- ---------------- -----------------------------

View File

@ -6,7 +6,6 @@
"shared": true, "shared": true,
"abstract": false, "abstract": false,
"autowire": false, "autowire": false,
"autowiring_types": [],
"arguments": [], "arguments": [],
"file": "\/path\/to\/file", "file": "\/path\/to\/file",
"factory_service": "factory.service", "factory_service": "factory.service",

View File

@ -1,6 +1,6 @@
------------------ --------------------------------- ----------------- ---------------------------------
 Option   Value   Option   Value 
------------------ --------------------------------- ----------------- ---------------------------------
Service ID - Service ID -
Class Full\Qualified\Class2 Class Full\Qualified\Class2
Tags tag1 (attr1: val1, attr2: val2) Tags tag1 (attr1: val1, attr2: val2)
@ -13,9 +13,8 @@
Shared yes Shared yes
Abstract no Abstract no
Autowired no Autowired no
Autowiring Types -
Required File /path/to/file Required File /path/to/file
Factory Service factory.service Factory Service factory.service
Factory Method get Factory Method get
------------------ --------------------------------- ----------------- ---------------------------------

View File

@ -4,6 +4,7 @@ CHANGELOG
3.3.0 3.3.0
----- -----
* deprecated autowiring-types, use aliases instead
* [EXPERIMENTAL] added support for getter-injection * [EXPERIMENTAL] added support for getter-injection
* added support for omitting the factory class name in a service definition if the definition class is set * added support for omitting the factory class name in a service definition if the definition class is set
* deprecated case insensitivity of service identifiers * deprecated case insensitivity of service identifiers

View File

@ -245,6 +245,13 @@ class AutowirePass extends AbstractRecursivePass
continue; continue;
} }
if ($this->container->has($typeName) && !$this->container->findDefinition($typeName)->isAbstract()) {
$arguments[$index] = new Reference($typeName);
$didAutowire = true;
continue;
}
if (null === $this->types) { if (null === $this->types) {
$this->populateAvailableTypes(); $this->populateAvailableTypes();
} }
@ -332,7 +339,7 @@ class AutowirePass extends AbstractRecursivePass
return; return;
} }
foreach ($definition->getAutowiringTypes() as $type) { foreach ($definition->getAutowiringTypes(false) as $type) {
$this->definedTypes[$type] = true; $this->definedTypes[$type] = true;
$this->types[$type] = $id; $this->types[$type] = $id;
} }

View File

@ -53,11 +53,15 @@ class DecoratorServicePass implements CompilerPassInterface
} else { } else {
$decoratedDefinition = $container->getDefinition($inner); $decoratedDefinition = $container->getDefinition($inner);
$definition->setTags(array_merge($decoratedDefinition->getTags(), $definition->getTags())); $definition->setTags(array_merge($decoratedDefinition->getTags(), $definition->getTags()));
$definition->setAutowiringTypes(array_merge($decoratedDefinition->getAutowiringTypes(), $definition->getAutowiringTypes())); if ($types = array_merge($decoratedDefinition->getAutowiringTypes(false), $definition->getAutowiringTypes(false))) {
$definition->setAutowiringTypes($types);
}
$public = $decoratedDefinition->isPublic(); $public = $decoratedDefinition->isPublic();
$decoratedDefinition->setPublic(false); $decoratedDefinition->setPublic(false);
$decoratedDefinition->setTags(array()); $decoratedDefinition->setTags(array());
if ($decoratedDefinition->getAutowiringTypes(false)) {
$decoratedDefinition->setAutowiringTypes(array()); $decoratedDefinition->setAutowiringTypes(array());
}
$container->setDefinition($renamedId, $decoratedDefinition); $container->setDefinition($renamedId, $decoratedDefinition);
} }

View File

@ -53,9 +53,9 @@ class PassConfig
new ResolveFactoryClassPass(), new ResolveFactoryClassPass(),
new FactoryReturnTypePass($resolveClassPass), new FactoryReturnTypePass($resolveClassPass),
new CheckDefinitionValidityPass(), new CheckDefinitionValidityPass(),
new AutowirePass(),
new ResolveReferencesToAliasesPass(), new ResolveReferencesToAliasesPass(),
new ResolveInvalidReferencesPass(), new ResolveInvalidReferencesPass(),
new AutowirePass(),
new AnalyzeServiceReferencesPass(true), new AnalyzeServiceReferencesPass(true),
new CheckCircularReferencesPass(), new CheckCircularReferencesPass(),
new CheckReferenceValidityPass(), new CheckReferenceValidityPass(),

View File

@ -90,7 +90,9 @@ class ResolveDefinitionTemplatesPass extends AbstractRecursivePass
$def->setMethodCalls($parentDef->getMethodCalls()); $def->setMethodCalls($parentDef->getMethodCalls());
$def->setOverriddenGetters($parentDef->getOverriddenGetters()); $def->setOverriddenGetters($parentDef->getOverriddenGetters());
$def->setProperties($parentDef->getProperties()); $def->setProperties($parentDef->getProperties());
$def->setAutowiringTypes($parentDef->getAutowiringTypes()); if ($parentDef->getAutowiringTypes(false)) {
$def->setAutowiringTypes($parentDef->getAutowiringTypes(false));
}
if ($parentDef->isDeprecated()) { if ($parentDef->isDeprecated()) {
$def->setDeprecated(true, $parentDef->getDeprecationMessage('%service_id%')); $def->setDeprecated(true, $parentDef->getDeprecationMessage('%service_id%'));
} }
@ -167,7 +169,7 @@ class ResolveDefinitionTemplatesPass extends AbstractRecursivePass
} }
// merge autowiring types // merge autowiring types
foreach ($definition->getAutowiringTypes() as $autowiringType) { foreach ($definition->getAutowiringTypes(false) as $autowiringType) {
$def->addAutowiringType($autowiringType); $def->addAutowiringType($autowiringType);
} }

View File

@ -679,9 +679,13 @@ class Definition
* @param string[] $types * @param string[] $types
* *
* @return $this * @return $this
*
* @deprecated since version 3.3, to be removed in 4.0.
*/ */
public function setAutowiringTypes(array $types) public function setAutowiringTypes(array $types)
{ {
@trigger_error('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead.', E_USER_DEPRECATED);
$this->autowiringTypes = array(); $this->autowiringTypes = array();
foreach ($types as $type) { foreach ($types as $type) {
@ -750,9 +754,15 @@ class Definition
* Gets autowiring types that will default to this definition. * Gets autowiring types that will default to this definition.
* *
* @return string[] * @return string[]
*
* @deprecated since version 3.3, to be removed in 4.0.
*/ */
public function getAutowiringTypes() public function getAutowiringTypes(/*$triggerDeprecation = true*/)
{ {
if (1 > func_num_args() || func_get_arg(0)) {
@trigger_error('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead.', E_USER_DEPRECATED);
}
return array_keys($this->autowiringTypes); return array_keys($this->autowiringTypes);
} }
@ -762,9 +772,13 @@ class Definition
* @param string $type * @param string $type
* *
* @return $this * @return $this
*
* @deprecated since version 3.3, to be removed in 4.0.
*/ */
public function addAutowiringType($type) public function addAutowiringType($type)
{ {
@trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), E_USER_DEPRECATED);
$this->autowiringTypes[$type] = true; $this->autowiringTypes[$type] = true;
return $this; return $this;
@ -776,9 +790,13 @@ class Definition
* @param string $type * @param string $type
* *
* @return $this * @return $this
*
* @deprecated since version 3.3, to be removed in 4.0.
*/ */
public function removeAutowiringType($type) public function removeAutowiringType($type)
{ {
@trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), E_USER_DEPRECATED);
unset($this->autowiringTypes[$type]); unset($this->autowiringTypes[$type]);
return $this; return $this;
@ -790,9 +808,13 @@ class Definition
* @param string $type * @param string $type
* *
* @return bool * @return bool
*
* @deprecated since version 3.3, to be removed in 4.0.
*/ */
public function hasAutowiringType($type) public function hasAutowiringType($type)
{ {
@trigger_error(sprintf('Autowiring-types are deprecated since Symfony 3.3 and will be removed in 4.0. Use aliases instead for "%s".', $type), E_USER_DEPRECATED);
return isset($this->autowiringTypes[$type]); return isset($this->autowiringTypes[$type]);
} }
} }

View File

@ -201,7 +201,7 @@ class XmlDumper extends Dumper
$service->setAttribute('autowire', 'true'); $service->setAttribute('autowire', 'true');
} }
foreach ($definition->getAutowiringTypes() as $autowiringTypeValue) { foreach ($definition->getAutowiringTypes(false) as $autowiringTypeValue) {
$autowiringType = $this->document->createElement('autowiring-type'); $autowiringType = $this->document->createElement('autowiring-type');
$autowiringType->appendChild($this->document->createTextNode($autowiringTypeValue)); $autowiringType->appendChild($this->document->createTextNode($autowiringTypeValue));

View File

@ -107,7 +107,7 @@ class YamlDumper extends Dumper
} }
$autowiringTypesCode = ''; $autowiringTypesCode = '';
foreach ($definition->getAutowiringTypes() as $autowiringType) { foreach ($definition->getAutowiringTypes(false) as $autowiringType) {
$autowiringTypesCode .= sprintf(" - %s\n", $this->dumper->dump($autowiringType)); $autowiringTypesCode .= sprintf(" - %s\n", $this->dumper->dump($autowiringType));
} }
if ($autowiringTypesCode) { if ($autowiringTypesCode) {

View File

@ -191,7 +191,7 @@ class AutowirePassTest extends \PHPUnit_Framework_TestCase
$container = new ContainerBuilder(); $container = new ContainerBuilder();
$container->register('a1', __NAMESPACE__.'\Foo'); $container->register('a1', __NAMESPACE__.'\Foo');
$container->register('a2', __NAMESPACE__.'\Foo')->addAutowiringType(__NAMESPACE__.'\Foo'); $container->register(Foo::class, Foo::class);
$aDefinition = $container->register('a', __NAMESPACE__.'\NotGuessableArgument'); $aDefinition = $container->register('a', __NAMESPACE__.'\NotGuessableArgument');
$aDefinition->setAutowired(true); $aDefinition->setAutowired(true);
@ -199,7 +199,7 @@ class AutowirePassTest extends \PHPUnit_Framework_TestCase
$pass->process($container); $pass->process($container);
$this->assertCount(1, $container->getDefinition('a')->getArguments()); $this->assertCount(1, $container->getDefinition('a')->getArguments());
$this->assertEquals('a2', (string) $container->getDefinition('a')->getArgument(0)); $this->assertEquals(Foo::class, (string) $container->getDefinition('a')->getArgument(0));
} }
public function testWithTypeSet() public function testWithTypeSet()
@ -207,7 +207,8 @@ class AutowirePassTest extends \PHPUnit_Framework_TestCase
$container = new ContainerBuilder(); $container = new ContainerBuilder();
$container->register('c1', __NAMESPACE__.'\CollisionA'); $container->register('c1', __NAMESPACE__.'\CollisionA');
$container->register('c2', __NAMESPACE__.'\CollisionB')->addAutowiringType(__NAMESPACE__.'\CollisionInterface'); $container->register('c2', __NAMESPACE__.'\CollisionB');
$container->setAlias(CollisionInterface::class, 'c2');
$aDefinition = $container->register('a', __NAMESPACE__.'\CannotBeAutowired'); $aDefinition = $container->register('a', __NAMESPACE__.'\CannotBeAutowired');
$aDefinition->setAutowired(true); $aDefinition->setAutowired(true);
@ -215,7 +216,7 @@ class AutowirePassTest extends \PHPUnit_Framework_TestCase
$pass->process($container); $pass->process($container);
$this->assertCount(1, $container->getDefinition('a')->getArguments()); $this->assertCount(1, $container->getDefinition('a')->getArguments());
$this->assertEquals('c2', (string) $container->getDefinition('a')->getArgument(0)); $this->assertEquals(CollisionInterface::class, (string) $container->getDefinition('a')->getArgument(0));
} }
public function testCreateDefinition() public function testCreateDefinition()

View File

@ -143,6 +143,9 @@ class DecoratorServicePassTest extends \PHPUnit_Framework_TestCase
$this->assertEquals(array('bar' => array('attr' => 'baz'), 'foobar' => array('attr' => 'bar')), $container->getDefinition('baz')->getTags()); $this->assertEquals(array('bar' => array('attr' => 'baz'), 'foobar' => array('attr' => 'bar')), $container->getDefinition('baz')->getTags());
} }
/**
* @group legacy
*/
public function testProcessMergesAutowiringTypesInDecoratingDefinitionAndRemoveThemFromDecoratedDefinition() public function testProcessMergesAutowiringTypesInDecoratingDefinitionAndRemoveThemFromDecoratedDefinition()
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();

View File

@ -322,6 +322,9 @@ class ResolveDefinitionTemplatesPassTest extends \PHPUnit_Framework_TestCase
$this->assertFalse($container->getDefinition('decorated_deprecated_parent')->isDeprecated()); $this->assertFalse($container->getDefinition('decorated_deprecated_parent')->isDeprecated());
} }
/**
* @group legacy
*/
public function testProcessMergeAutowiringTypes() public function testProcessMergeAutowiringTypes()
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();

View File

@ -313,6 +313,9 @@ class DefinitionTest extends \PHPUnit_Framework_TestCase
$this->assertTrue($def->isAutowired()); $this->assertTrue($def->isAutowired());
} }
/**
* @group legacy
*/
public function testTypes() public function testTypes()
{ {
$def = new Definition('stdClass'); $def = new Definition('stdClass');

View File

@ -7,8 +7,6 @@ $container = new ContainerBuilder();
$container $container
->register('foo', 'Foo') ->register('foo', 'Foo')
->setAutowired(true) ->setAutowired(true)
->addAutowiringType('A')
->addAutowiringType('B')
; ;
return $container; return $container;

View File

@ -1,9 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services> <services>
<service id="foo" class="Foo" autowire="true"> <service id="foo" class="Foo" autowire="true"/>
<autowiring-type>A</autowiring-type>
<autowiring-type>B</autowiring-type>
</service>
</services> </services>
</container> </container>

View File

@ -3,6 +3,3 @@ services:
foo: foo:
class: Foo class: Foo
autowire: true autowire: true
autowiring_types:
- A
- B

View File

@ -554,6 +554,9 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
$this->assertSame('configureBar', $barConfigurator[1]); $this->assertSame('configureBar', $barConfigurator[1]);
} }
/**
* @group legacy
*/
public function testType() public function testType()
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();

View File

@ -325,6 +325,9 @@ class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase
$loader->load('bad_types2.yml'); $loader->load('bad_types2.yml');
} }
/**
* @group legacy
*/
public function testTypes() public function testTypes()
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();