[DI] Test references inside ServiceLocator are not inlined
This commit is contained in:
parent
8783602946
commit
f81c57755d
@ -22,6 +22,7 @@ use Symfony\Component\DependencyInjection\ContainerBuilder;
|
|||||||
use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
|
use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
|
||||||
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
|
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
|
||||||
use Symfony\Component\DependencyInjection\Reference;
|
use Symfony\Component\DependencyInjection\Reference;
|
||||||
|
use Symfony\Component\DependencyInjection\Tests\Fixtures\StubbedTranslator;
|
||||||
use Symfony\Component\DependencyInjection\TypedReference;
|
use Symfony\Component\DependencyInjection\TypedReference;
|
||||||
use Symfony\Component\DependencyInjection\Definition;
|
use Symfony\Component\DependencyInjection\Definition;
|
||||||
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
|
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
|
||||||
@ -534,6 +535,40 @@ class PhpDumperTest extends TestCase
|
|||||||
'nil' => $nil = new ServiceClosureArgument(new Reference('nil')),
|
'nil' => $nil = new ServiceClosureArgument(new Reference('nil')),
|
||||||
))
|
))
|
||||||
;
|
;
|
||||||
|
|
||||||
|
// no method calls
|
||||||
|
$container->register('translator.loader_1', 'stdClass');
|
||||||
|
$container->register('translator.loader_1_locator', ServiceLocator::class)
|
||||||
|
->setPublic(false)
|
||||||
|
->addArgument(array(
|
||||||
|
'translator.loader_1' => new ServiceClosureArgument(new Reference('translator.loader_1')),
|
||||||
|
));
|
||||||
|
$container->register('translator_1', StubbedTranslator::class)
|
||||||
|
->addArgument(new Reference('translator.loader_1_locator'));
|
||||||
|
|
||||||
|
// one method calls
|
||||||
|
$container->register('translator.loader_2', 'stdClass');
|
||||||
|
$container->register('translator.loader_2_locator', ServiceLocator::class)
|
||||||
|
->setPublic(false)
|
||||||
|
->addArgument(array(
|
||||||
|
'translator.loader_2' => new ServiceClosureArgument(new Reference('translator.loader_2')),
|
||||||
|
));
|
||||||
|
$container->register('translator_2', StubbedTranslator::class)
|
||||||
|
->addArgument(new Reference('translator.loader_2_locator'))
|
||||||
|
->addMethodCall('addResource', array('db', new Reference('translator.loader_2'), 'nl'));
|
||||||
|
|
||||||
|
// two method calls
|
||||||
|
$container->register('translator.loader_3', 'stdClass');
|
||||||
|
$container->register('translator.loader_3_locator', ServiceLocator::class)
|
||||||
|
->setPublic(false)
|
||||||
|
->addArgument(array(
|
||||||
|
'translator.loader_3' => new ServiceClosureArgument(new Reference('translator.loader_3')),
|
||||||
|
));
|
||||||
|
$container->register('translator_3', StubbedTranslator::class)
|
||||||
|
->addArgument(new Reference('translator.loader_3_locator'))
|
||||||
|
->addMethodCall('addResource', array('db', new Reference('translator.loader_3'), 'nl'))
|
||||||
|
->addMethodCall('addResource', array('db', new Reference('translator.loader_3'), 'en'));
|
||||||
|
|
||||||
$nil->setValues(array(null));
|
$nil->setValues(array(null));
|
||||||
$container->register('bar_service', 'stdClass')->setArguments(array(new Reference('baz_service')));
|
$container->register('bar_service', 'stdClass')->setArguments(array(new Reference('baz_service')));
|
||||||
$container->register('baz_service', 'stdClass')->setPublic(false);
|
$container->register('baz_service', 'stdClass')->setPublic(false);
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\DependencyInjection\Tests\Fixtures;
|
||||||
|
|
||||||
|
use Psr\Container\ContainerInterface;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Iltar van der Berg <kjarli@gmail.com>
|
||||||
|
*/
|
||||||
|
class StubbedTranslator
|
||||||
|
{
|
||||||
|
public function __construct(ContainerInterface $container)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addResource($format, $resource, $locale, $domain = null)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -31,6 +31,12 @@ class ProjectServiceContainer extends Container
|
|||||||
'bar_service' => 'getBarServiceService',
|
'bar_service' => 'getBarServiceService',
|
||||||
'baz_service' => 'getBazServiceService',
|
'baz_service' => 'getBazServiceService',
|
||||||
'foo_service' => 'getFooServiceService',
|
'foo_service' => 'getFooServiceService',
|
||||||
|
'translator.loader_1' => 'getTranslator_Loader1Service',
|
||||||
|
'translator.loader_2' => 'getTranslator_Loader2Service',
|
||||||
|
'translator.loader_3' => 'getTranslator_Loader3Service',
|
||||||
|
'translator_1' => 'getTranslator1Service',
|
||||||
|
'translator_2' => 'getTranslator2Service',
|
||||||
|
'translator_3' => 'getTranslator3Service',
|
||||||
);
|
);
|
||||||
$this->privates = array(
|
$this->privates = array(
|
||||||
'baz_service' => true,
|
'baz_service' => true,
|
||||||
@ -97,6 +103,101 @@ class ProjectServiceContainer extends Container
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the 'translator.loader_1' service.
|
||||||
|
*
|
||||||
|
* This service is shared.
|
||||||
|
* This method always returns the same instance of the service.
|
||||||
|
*
|
||||||
|
* @return \stdClass A stdClass instance
|
||||||
|
*/
|
||||||
|
protected function getTranslator_Loader1Service()
|
||||||
|
{
|
||||||
|
return $this->services['translator.loader_1'] = new \stdClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the 'translator.loader_2' service.
|
||||||
|
*
|
||||||
|
* This service is shared.
|
||||||
|
* This method always returns the same instance of the service.
|
||||||
|
*
|
||||||
|
* @return \stdClass A stdClass instance
|
||||||
|
*/
|
||||||
|
protected function getTranslator_Loader2Service()
|
||||||
|
{
|
||||||
|
return $this->services['translator.loader_2'] = new \stdClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the 'translator.loader_3' service.
|
||||||
|
*
|
||||||
|
* This service is shared.
|
||||||
|
* This method always returns the same instance of the service.
|
||||||
|
*
|
||||||
|
* @return \stdClass A stdClass instance
|
||||||
|
*/
|
||||||
|
protected function getTranslator_Loader3Service()
|
||||||
|
{
|
||||||
|
return $this->services['translator.loader_3'] = new \stdClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the 'translator_1' service.
|
||||||
|
*
|
||||||
|
* This service is shared.
|
||||||
|
* This method always returns the same instance of the service.
|
||||||
|
*
|
||||||
|
* @return \Symfony\Component\DependencyInjection\Tests\Fixtures\StubbedTranslator A Symfony\Component\DependencyInjection\Tests\Fixtures\StubbedTranslator instance
|
||||||
|
*/
|
||||||
|
protected function getTranslator1Service()
|
||||||
|
{
|
||||||
|
return $this->services['translator_1'] = new \Symfony\Component\DependencyInjection\Tests\Fixtures\StubbedTranslator(new \Symfony\Component\DependencyInjection\ServiceLocator(array('translator.loader_1' => function () {
|
||||||
|
return ${($_ = isset($this->services['translator.loader_1']) ? $this->services['translator.loader_1'] : $this->get('translator.loader_1')) && false ?: '_'};
|
||||||
|
})));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the 'translator_2' service.
|
||||||
|
*
|
||||||
|
* This service is shared.
|
||||||
|
* This method always returns the same instance of the service.
|
||||||
|
*
|
||||||
|
* @return \Symfony\Component\DependencyInjection\Tests\Fixtures\StubbedTranslator A Symfony\Component\DependencyInjection\Tests\Fixtures\StubbedTranslator instance
|
||||||
|
*/
|
||||||
|
protected function getTranslator2Service()
|
||||||
|
{
|
||||||
|
$this->services['translator_2'] = $instance = new \Symfony\Component\DependencyInjection\Tests\Fixtures\StubbedTranslator(new \Symfony\Component\DependencyInjection\ServiceLocator(array('translator.loader_2' => function () {
|
||||||
|
return ${($_ = isset($this->services['translator.loader_2']) ? $this->services['translator.loader_2'] : $this->get('translator.loader_2')) && false ?: '_'};
|
||||||
|
})));
|
||||||
|
|
||||||
|
$instance->addResource('db', ${($_ = isset($this->services['translator.loader_2']) ? $this->services['translator.loader_2'] : $this->get('translator.loader_2')) && false ?: '_'}, 'nl');
|
||||||
|
|
||||||
|
return $instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the 'translator_3' service.
|
||||||
|
*
|
||||||
|
* This service is shared.
|
||||||
|
* This method always returns the same instance of the service.
|
||||||
|
*
|
||||||
|
* @return \Symfony\Component\DependencyInjection\Tests\Fixtures\StubbedTranslator A Symfony\Component\DependencyInjection\Tests\Fixtures\StubbedTranslator instance
|
||||||
|
*/
|
||||||
|
protected function getTranslator3Service()
|
||||||
|
{
|
||||||
|
$a = ${($_ = isset($this->services['translator.loader_3']) ? $this->services['translator.loader_3'] : $this->get('translator.loader_3')) && false ?: '_'};
|
||||||
|
|
||||||
|
$this->services['translator_3'] = $instance = new \Symfony\Component\DependencyInjection\Tests\Fixtures\StubbedTranslator(new \Symfony\Component\DependencyInjection\ServiceLocator(array('translator.loader_3' => function () {
|
||||||
|
return ${($_ = isset($this->services['translator.loader_3']) ? $this->services['translator.loader_3'] : $this->get('translator.loader_3')) && false ?: '_'};
|
||||||
|
})));
|
||||||
|
|
||||||
|
$instance->addResource('db', $a, 'nl');
|
||||||
|
$instance->addResource('db', $a, 'en');
|
||||||
|
|
||||||
|
return $instance;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the 'baz_service' service.
|
* Gets the 'baz_service' service.
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user