[HttpKernel] Lazy load argument value resolvers

This commit is contained in:
Robin Chalas 2017-02-02 19:39:04 +01:00
parent 03b7cf72dc
commit 02b4aaa25f
No known key found for this signature in database
GPG Key ID: 89672113756EE03B
4 changed files with 7 additions and 6 deletions

View File

@ -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));
}
}

View File

@ -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">

View File

@ -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()

View File

@ -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();