[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,8 +185,8 @@ 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.'`';
} }
if (isset($options['show_arguments']) && $options['show_arguments']) { if (isset($options['show_arguments']) && $options['show_arguments']) {

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,19 +3,18 @@
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 -
Public yes Public yes
Synthetic no Synthetic no
Lazy yes Lazy yes
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,23 +3,22 @@
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)
tag1 (attr3: val3) tag1 (attr3: val3)
tag2 tag2
Calls setMailer Calls setMailer
Public no Public no
Synthetic yes Synthetic yes
Lazy no Lazy no
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,17 +1,16 @@
------------------ ----------------------------- ---------------- -----------------------------
 Option   Value   Option   Value 
------------------ ----------------------------- ---------------- -----------------------------
Service ID - Service ID -
Class Full\Qualified\Class1 Class Full\Qualified\Class1
Tags - Tags -
Public yes Public yes
Synthetic no Synthetic no
Lazy yes Lazy yes
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,21 +1,20 @@
------------------ --------------------------------- ----------------- ---------------------------------
 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)
tag1 (attr3: val3) tag1 (attr3: val3)
tag2 tag2
Calls setMailer Calls setMailer
Public no Public no
Synthetic yes Synthetic yes
Lazy no Lazy no
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,20 +1,19 @@
------------------ ----------------------------- ---------------- -----------------------------
 Option   Value   Option   Value 
------------------ ----------------------------- ---------------- -----------------------------
Service ID - Service ID -
Class Full\Qualified\Class1 Class Full\Qualified\Class1
Tags - Tags -
Public yes Public yes
Synthetic no Synthetic no
Lazy yes Lazy yes
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,21 +1,20 @@
------------------ --------------------------------- ----------------- ---------------------------------
 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)
tag1 (attr3: val3) tag1 (attr3: val3)
tag2 tag2
Calls setMailer Calls setMailer
Public no Public no
Synthetic yes Synthetic yes
Lazy no Lazy no
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());
$decoratedDefinition->setAutowiringTypes(array()); if ($decoratedDefinition->getAutowiringTypes(false)) {
$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();