Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f4af95f

Browse files
committed
Deprecated passing Parameter instances as class name to Definition.
1 parent 09e3cef commit f4af95f

File tree

6 files changed

+57
-2
lines changed

6 files changed

+57
-2
lines changed

UPGRADE-4.4.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,18 @@ DependencyInjection
4141
arguments: [!tagged_iterator app.handler]
4242
```
4343

44+
* Passing an instance of `Symfony\Component\DependencyInjection\Parameter` as class name to `Symfony\Component\DependencyInjection\Definition` is deprecated.
45+
46+
Before:
47+
```php
48+
new Definition(new Parameter('my_class'));
49+
```
50+
51+
After:
52+
```php
53+
new Definition('%my_class%');
54+
```
55+
4456
Filesystem
4557
----------
4658

src/Symfony/Component/DependencyInjection/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ CHANGELOG
66

77
* deprecated support for short factories and short configurators in Yaml
88
* deprecated `tagged` in favor of `tagged_iterator`
9+
* deprecated passing an instance of `Symfony\Component\DependencyInjection\Parameter` as class name to `Symfony\Component\DependencyInjection\Definition`
910

1011
4.3.0
1112
-----

src/Symfony/Component/DependencyInjection/Definition.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,13 @@ public function getDecoratedService()
171171
*/
172172
public function setClass($class)
173173
{
174+
if ($class instanceof Parameter) {
175+
@trigger_error(sprintf('Passing an instance of %s as class name to %s in deprecated in Symfony 4.4 and will result in a TypeError in 5.0. Please pass the string "%%%s%%" instead.', Parameter::class, __CLASS__, (string) $class), E_USER_DEPRECATED);
176+
}
177+
if (null !== $class && !\is_string($class)) {
178+
@trigger_error(sprintf('The class name passed to %s is expected to be a string. Passing a %s is deprecated in Symfony 4.4 and will result in a TypeError in 5.0.', __CLASS__, \is_object($class) ? \get_class($class) : \gettype($class)), E_USER_DEPRECATED);
179+
}
180+
174181
$this->changes['class'] = true;
175182

176183
$this->class = $class;

src/Symfony/Component/DependencyInjection/Tests/DefinitionTest.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\DependencyInjection\Definition;
16+
use Symfony\Component\DependencyInjection\Parameter;
1617
use Symfony\Component\DependencyInjection\Reference;
1718

1819
class DefinitionTest extends TestCase
@@ -27,6 +28,18 @@ public function testConstructor()
2728
$this->assertEquals(['foo'], $def->getArguments(), '__construct() takes an optional array of arguments as its second argument');
2829
}
2930

31+
/**
32+
* @group legacy
33+
* @expectedDeprecation Passing an instance of Symfony\Component\DependencyInjection\Parameter as class name to Symfony\Component\DependencyInjection\Definition in deprecated in Symfony 4.4 and will result in a TypeError in 5.0. Please pass the string "%parameter%" instead.
34+
*/
35+
public function testConstructorWithParameter()
36+
{
37+
$parameter = new Parameter('parameter');
38+
39+
$def = new Definition($parameter);
40+
$this->assertSame($parameter, $def->getClass(), '__construct() accepts Parameter instances');
41+
}
42+
3043
public function testSetGetFactory()
3144
{
3245
$def = new Definition();
@@ -49,6 +62,28 @@ public function testSetGetClass()
4962
$this->assertEquals('foo', $def->getClass(), '->getClass() returns the class name');
5063
}
5164

65+
/**
66+
* @group legacy
67+
* @expectedDeprecation Passing an instance of Symfony\Component\DependencyInjection\Parameter as class name to Symfony\Component\DependencyInjection\Definition in deprecated in Symfony 4.4 and will result in a TypeError in 5.0. Please pass the string "%parameter%" instead.
68+
*/
69+
public function testSetGetClassWithParameter()
70+
{
71+
$def = new Definition();
72+
$parameter = new Parameter('parameter');
73+
$this->assertSame($parameter, $def->setClass($parameter)->getClass(), '->getClass() returns the parameterized class name');
74+
}
75+
76+
/**
77+
* @group legacy
78+
* @expectedDeprecation The class name passed to Symfony\Component\DependencyInjection\Definition is expected to be a string. Passing a stdClass is deprecated in Symfony 4.4 and will result in a TypeError in 5.0.
79+
*/
80+
public function testSetGetClassWithObject()
81+
{
82+
$def = new Definition();
83+
$classObject = new \stdClass();
84+
$this->assertSame($classObject, $def->setClass($classObject)->getClass(), '->getClass() returns the parameterized class name');
85+
}
86+
5287
public function testSetGetDecoratedService()
5388
{
5489
$def = new Definition('stdClass');

src/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1082,7 +1082,7 @@ public function testDumpHandlesObjectClassNames()
10821082
'class' => 'stdClass',
10831083
]));
10841084

1085-
$container->setDefinition('foo', new Definition(new Parameter('class')));
1085+
$container->setDefinition('foo', new Definition('%class%'));
10861086
$container->setDefinition('bar', new Definition('stdClass', [
10871087
new Reference('foo'),
10881088
]))->setPublic(true);

src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,7 @@ public function testRegistersTraceableBusesToCollector()
497497
$dataCollector = $this->getMockBuilder(MessengerDataCollector::class)->getMock();
498498

499499
$container = $this->getContainerBuilder($fooBusId = 'messenger.bus.foo');
500-
$container->register('data_collector.messenger', $dataCollector);
500+
$container->register('data_collector.messenger', MessengerDataCollector::class);
501501
$container->setParameter('kernel.debug', true);
502502

503503
(new MessengerPass())->process($container);

0 commit comments

Comments
 (0)