bug #36519 [FrameworkBundle] debug:autowiring: Fix wrong display when using class_alias (weaverryan)
This PR was merged into the 4.4 branch. Discussion ---------- [FrameworkBundle] debug:autowiring: Fix wrong display when using class_alias | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | None | License | MIT | Doc PR | not needed Imagine that `FooInterface` is an alias, but it is deprecated and so has a `class_alias` to `BarInterface`. Currently, `debug:autowiring` will actually print that's the autowiring alias is `BarInterface`, despite there being no such id in the container. @nicolas-grekas originally (on purpose) made the 2nd argument to `Descriptor::getClassDescription()` be passed by reference *for* this exact feature -56aab09b01
- but I can't figure out why. This change (which effectively removes the by-reference modifying) made no existing tests fail. Discovered this because the whole deprecated`Doctrine\Common\Persistence\ManagerRegistry` vs newer `Doctrine\Persistence\ManagerRegistry` causes the issue. Thanks! Commits -------d34b437ce0
Fixing a bug where class_alias would cause incorrect items in debug:autowiring
This commit is contained in:
commit
2d7b0b8dad
@ -103,9 +103,10 @@ EOF
|
|||||||
$serviceIdsNb = 0;
|
$serviceIdsNb = 0;
|
||||||
foreach ($serviceIds as $serviceId) {
|
foreach ($serviceIds as $serviceId) {
|
||||||
$text = [];
|
$text = [];
|
||||||
|
$resolvedServiceId = $serviceId;
|
||||||
if (0 !== strpos($serviceId, $previousId)) {
|
if (0 !== strpos($serviceId, $previousId)) {
|
||||||
$text[] = '';
|
$text[] = '';
|
||||||
if ('' !== $description = Descriptor::getClassDescription($serviceId, $serviceId)) {
|
if ('' !== $description = Descriptor::getClassDescription($serviceId, $resolvedServiceId)) {
|
||||||
if (isset($hasAlias[$serviceId])) {
|
if (isset($hasAlias[$serviceId])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Symfony\Bundle\FrameworkBundle\Tests\Fixtures;
|
||||||
|
|
||||||
|
class_alias(
|
||||||
|
ClassAliasTargetClass::class,
|
||||||
|
__NAMESPACE__ . '\ClassAliasExampleClass'
|
||||||
|
);
|
||||||
|
|
||||||
|
if (false) {
|
||||||
|
class ClassAliasExampleClass
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Symfony\Bundle\FrameworkBundle\Tests\Fixtures;
|
||||||
|
|
||||||
|
class ClassAliasTargetClass
|
||||||
|
{
|
||||||
|
}
|
@ -97,4 +97,16 @@ class DebugAutowiringCommandTest extends AbstractWebTestCase
|
|||||||
$tester->run(['command' => 'debug:autowiring', 'search' => 'redirect', '--all' => true]);
|
$tester->run(['command' => 'debug:autowiring', 'search' => 'redirect', '--all' => true]);
|
||||||
$this->assertStringContainsString('Pro-tip: use interfaces in your type-hints instead of classes to benefit from the dependency inversion principle.', $tester->getDisplay());
|
$this->assertStringContainsString('Pro-tip: use interfaces in your type-hints instead of classes to benefit from the dependency inversion principle.', $tester->getDisplay());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testNotConfusedByClassAliases()
|
||||||
|
{
|
||||||
|
static::bootKernel(['test_case' => 'ContainerDebug', 'root_config' => 'config.yml']);
|
||||||
|
|
||||||
|
$application = new Application(static::$kernel);
|
||||||
|
$application->setAutoExit(false);
|
||||||
|
|
||||||
|
$tester = new ApplicationTester($application);
|
||||||
|
$tester->run(['command' => 'debug:autowiring', 'search' => 'ClassAlias']);
|
||||||
|
$this->assertStringContainsString('Symfony\Bundle\FrameworkBundle\Tests\Fixtures\ClassAliasExampleClass (public)', $tester->getDisplay());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ services:
|
|||||||
public: false
|
public: false
|
||||||
Symfony\Bundle\FrameworkBundle\Tests\Fixtures\BackslashClass:
|
Symfony\Bundle\FrameworkBundle\Tests\Fixtures\BackslashClass:
|
||||||
class: Symfony\Bundle\FrameworkBundle\Tests\Fixtures\BackslashClass
|
class: Symfony\Bundle\FrameworkBundle\Tests\Fixtures\BackslashClass
|
||||||
|
Symfony\Bundle\FrameworkBundle\Tests\Fixtures\ClassAliasExampleClass: '@public'
|
||||||
env:
|
env:
|
||||||
class: stdClass
|
class: stdClass
|
||||||
arguments:
|
arguments:
|
||||||
|
Reference in New Issue
Block a user