[HttpKernel] Lazy load argument value resolvers
This commit is contained in:
parent
03b7cf72dc
commit
02b4aaa25f
@ -11,6 +11,7 @@
|
||||
|
||||
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
|
||||
|
||||
use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
|
||||
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
|
||||
use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
@ -32,6 +33,6 @@ class ControllerArgumentValueResolverPass implements CompilerPassInterface
|
||||
|
||||
$definition = $container->getDefinition('argument_resolver');
|
||||
$argumentResolvers = $this->findAndSortTaggedServices('controller.argument_value_resolver', $container);
|
||||
$definition->replaceArgument(1, $argumentResolvers);
|
||||
$definition->replaceArgument(1, new IteratorArgument($argumentResolvers));
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
<service id="argument_resolver" class="Symfony\Component\HttpKernel\Controller\ArgumentResolver" public="false">
|
||||
<argument type="service" id="argument_metadata_factory" />
|
||||
<argument type="collection" />
|
||||
<argument /> <!-- argument value resolvers -->
|
||||
</service>
|
||||
|
||||
<service id="argument_resolver.request_attribute" class="Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestAttributeValueResolver" public="false">
|
||||
|
@ -42,7 +42,7 @@ class ControllerArgumentValueResolverPassTest extends \PHPUnit_Framework_TestCas
|
||||
}
|
||||
|
||||
(new ControllerArgumentValueResolverPass())->process($container);
|
||||
$this->assertEquals($expected, $definition->getArgument(1));
|
||||
$this->assertEquals($expected, $definition->getArgument(1)->getValues());
|
||||
}
|
||||
|
||||
public function testReturningEmptyArrayWhenNoService()
|
||||
@ -52,7 +52,7 @@ class ControllerArgumentValueResolverPassTest extends \PHPUnit_Framework_TestCas
|
||||
$container->setDefinition('argument_resolver', $definition);
|
||||
|
||||
(new ControllerArgumentValueResolverPass())->process($container);
|
||||
$this->assertEquals(array(), $definition->getArgument(1));
|
||||
$this->assertEquals(array(), $definition->getArgument(1)->getValues());
|
||||
}
|
||||
|
||||
public function testNoArgumentResolver()
|
||||
|
@ -29,11 +29,11 @@ final class ArgumentResolver implements ArgumentResolverInterface
|
||||
private $argumentMetadataFactory;
|
||||
|
||||
/**
|
||||
* @var ArgumentValueResolverInterface[]
|
||||
* @var iterable|ArgumentValueResolverInterface[]
|
||||
*/
|
||||
private $argumentValueResolvers;
|
||||
|
||||
public function __construct(ArgumentMetadataFactoryInterface $argumentMetadataFactory = null, array $argumentValueResolvers = array())
|
||||
public function __construct(ArgumentMetadataFactoryInterface $argumentMetadataFactory = null, $argumentValueResolvers = array())
|
||||
{
|
||||
$this->argumentMetadataFactory = $argumentMetadataFactory ?: new ArgumentMetadataFactory();
|
||||
$this->argumentValueResolvers = $argumentValueResolvers ?: self::getDefaultArgumentValueResolvers();
|
||||
|
Reference in New Issue
Block a user