bug #22912 [DI] Avoid private call to Container::has() (ro0NL)
This PR was merged into the 3.2 branch.
Discussion
----------
[DI] Avoid private call to Container::has()
| Q | A
| ------------- | ---
| Branch? | 3.2
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #... <!-- #-prefixed issue number(s), if any -->
| License | MIT
| Doc PR | symfony/symfony-docs#... <!--highly recommended for new features-->
Fixes `User Deprecated: Checking for the existence of the "debug.file_link_formatter" private service is deprecated since Symfony 3.2 and won't be supported anymore in Symfony 4.0.`
Commits
-------
56892819e3
[DI] Avoid private call to Container::has()
This commit is contained in:
commit
c1343043af
@ -1191,9 +1191,17 @@ EOF;
|
||||
|
||||
$conditions = array();
|
||||
foreach ($services as $service) {
|
||||
if ($this->container->hasDefinition($service) && !$this->container->getDefinition($service)->isPublic()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$conditions[] = sprintf("\$this->has('%s')", $service);
|
||||
}
|
||||
|
||||
if (!$conditions) {
|
||||
return $code;
|
||||
}
|
||||
|
||||
// re-indent the wrapped code
|
||||
$code = implode("\n", array_map(function ($line) { return $line ? ' '.$line : $line; }, explode("\n", $code)));
|
||||
|
||||
|
@ -15,6 +15,7 @@ use DummyProxyDumper;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\FileLocator;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
|
||||
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
@ -406,4 +407,21 @@ class PhpDumperTest extends TestCase
|
||||
|
||||
$this->assertStringEqualsFile(self::$fixturesPath.'/php/services_private_frozen.php', $dumper->dump());
|
||||
}
|
||||
|
||||
public function testPrivateWithIgnoreOnInvalidReference()
|
||||
{
|
||||
require_once self::$fixturesPath.'/includes/classes.php';
|
||||
|
||||
$container = new ContainerBuilder();
|
||||
$container->register('not_invalid', 'BazClass')
|
||||
->setPublic(false);
|
||||
$container->register('bar', 'BarClass')
|
||||
->addMethodCall('setBaz', array(new Reference('not_invalid', ContainerInterface::IGNORE_ON_INVALID_REFERENCE)));
|
||||
|
||||
$dumper = new PhpDumper($container);
|
||||
eval('?>'.$dumper->dump(array('class' => 'Symfony_DI_PhpDumper_Test_Private_With_Ignore_On_Invalid_Reference')));
|
||||
|
||||
$container = new \Symfony_DI_PhpDumper_Test_Private_With_Ignore_On_Invalid_Reference();
|
||||
$this->assertInstanceOf('BazClass', $container->get('bar')->getBaz());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user