Skip to content

Commit 510fa1f

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

File tree

5 files changed

+42
-1
lines changed

5 files changed

+42
-1
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: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,10 @@ 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+
174178
$this->changes['class'] = true;
175179

176180
$this->class = $class;

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

Lines changed: 24 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,17 @@ 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+
5276
public function testSetGetDecoratedService()
5377
{
5478
$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);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy