Move ControllerArgumentValueResolverPass to the HttpKernel component
This commit is contained in:
parent
119087a446
commit
8bad8a109c
@ -148,6 +148,10 @@ FrameworkBundle
|
|||||||
|
|
||||||
* Extending `ConstraintValidatorFactory` is deprecated and won't be supported in 4.0.
|
* Extending `ConstraintValidatorFactory` is deprecated and won't be supported in 4.0.
|
||||||
|
|
||||||
|
* The `Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ControllerArgumentValueResolverPass` class
|
||||||
|
has been removed. Use the `Symfony\Component\HttpKernel\DependencyInjection\ControllerArgumentValueResolverPass`
|
||||||
|
class instead.
|
||||||
|
|
||||||
HttpKernel
|
HttpKernel
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
@ -207,6 +207,10 @@ FrameworkBundle
|
|||||||
|
|
||||||
* Extending `ConstraintValidatorFactory` is not supported anymore.
|
* Extending `ConstraintValidatorFactory` is not supported anymore.
|
||||||
|
|
||||||
|
* The `Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ControllerArgumentValueResolverPass` class
|
||||||
|
has been removed. Use the `Symfony\Component\HttpKernel\DependencyInjection\ControllerArgumentValueResolverPass`
|
||||||
|
class instead.
|
||||||
|
|
||||||
HttpFoundation
|
HttpFoundation
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
|
@ -27,6 +27,8 @@ CHANGELOG
|
|||||||
`render()`, `renderView()` and `stream()` methods can only use Twig (using the Templating component is not supported).
|
`render()`, `renderView()` and `stream()` methods can only use Twig (using the Templating component is not supported).
|
||||||
The `json()` method requires the Serializer component (use `Symfony\Component\HttpFoundation\JsonResponse` directly if
|
The `json()` method requires the Serializer component (use `Symfony\Component\HttpFoundation\JsonResponse` directly if
|
||||||
you do not want to use the Serializer).
|
you do not want to use the Serializer).
|
||||||
|
* Deprecated `ControllerArgumentValueResolverPass`. Use
|
||||||
|
`Symfony\Component\HttpKernel\DependencyInjection\ControllerArgumentValueResolverPass` instead
|
||||||
|
|
||||||
3.2.0
|
3.2.0
|
||||||
-----
|
-----
|
||||||
|
@ -11,28 +11,17 @@
|
|||||||
|
|
||||||
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
|
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
|
||||||
|
|
||||||
use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
|
use Symfony\Component\HttpKernel\DependencyInjection\ControllerArgumentValueResolverPass as BaseControllerArgumentValueResolverPass;
|
||||||
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
|
|
||||||
use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait;
|
@trigger_error(sprintf('The %s class is deprecated since version 3.3 and will be removed in 4.0. Use %s instead.', ControllerArgumentValueResolverPass::class, BaseControllerArgumentValueResolverPass::class), E_USER_DEPRECATED);
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gathers and configures the argument value resolvers.
|
* Gathers and configures the argument value resolvers.
|
||||||
*
|
*
|
||||||
* @author Iltar van der Berg <kjarli@gmail.com>
|
* @author Iltar van der Berg <kjarli@gmail.com>
|
||||||
|
*
|
||||||
|
* @deprecated since version 3.3, to be removed in 4.0. Use {@link BaseControllerArgumentValueResolverPass}
|
||||||
*/
|
*/
|
||||||
class ControllerArgumentValueResolverPass implements CompilerPassInterface
|
class ControllerArgumentValueResolverPass extends BaseControllerArgumentValueResolverPass
|
||||||
{
|
{
|
||||||
use PriorityTaggedServiceTrait;
|
|
||||||
|
|
||||||
public function process(ContainerBuilder $container)
|
|
||||||
{
|
|
||||||
if (!$container->hasDefinition('argument_resolver')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$definition = $container->getDefinition('argument_resolver');
|
|
||||||
$argumentResolvers = $this->findAndSortTaggedServices('controller.argument_value_resolver', $container);
|
|
||||||
$definition->replaceArgument(1, new IteratorArgument($argumentResolvers));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,6 @@ use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\AddValidatorInit
|
|||||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CacheCollectorPass;
|
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CacheCollectorPass;
|
||||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CachePoolPass;
|
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CachePoolPass;
|
||||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CachePoolClearerPass;
|
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\CachePoolClearerPass;
|
||||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ControllerArgumentValueResolverPass;
|
|
||||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\DataCollectorTranslatorPass;
|
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\DataCollectorTranslatorPass;
|
||||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TemplatingPass;
|
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TemplatingPass;
|
||||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\RoutingResolverPass;
|
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\RoutingResolverPass;
|
||||||
@ -36,6 +35,7 @@ use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\UnusedTagsPass;
|
|||||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ValidateWorkflowsPass;
|
use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\ValidateWorkflowsPass;
|
||||||
use Symfony\Component\Config\DependencyInjection\ConfigCachePass;
|
use Symfony\Component\Config\DependencyInjection\ConfigCachePass;
|
||||||
use Symfony\Component\Console\DependencyInjection\AddConsoleCommandPass;
|
use Symfony\Component\Console\DependencyInjection\AddConsoleCommandPass;
|
||||||
|
use Symfony\Component\HttpKernel\DependencyInjection\ControllerArgumentValueResolverPass;
|
||||||
use Symfony\Component\PropertyInfo\DependencyInjection\PropertyInfoPass;
|
use Symfony\Component\PropertyInfo\DependencyInjection\PropertyInfoPass;
|
||||||
use Symfony\Component\Serializer\DependencyInjection\SerializerPass;
|
use Symfony\Component\Serializer\DependencyInjection\SerializerPass;
|
||||||
use Symfony\Component\Debug\ErrorHandler;
|
use Symfony\Component\Debug\ErrorHandler;
|
||||||
|
@ -18,6 +18,9 @@ use Symfony\Component\DependencyInjection\Definition;
|
|||||||
use Symfony\Component\DependencyInjection\Reference;
|
use Symfony\Component\DependencyInjection\Reference;
|
||||||
use Symfony\Component\HttpKernel\Controller\ArgumentResolver;
|
use Symfony\Component\HttpKernel\Controller\ArgumentResolver;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group legacy
|
||||||
|
*/
|
||||||
class ControllerArgumentValueResolverPassTest extends TestCase
|
class ControllerArgumentValueResolverPassTest extends TestCase
|
||||||
{
|
{
|
||||||
public function testServicesAreOrderedAccordingToPriority()
|
public function testServicesAreOrderedAccordingToPriority()
|
||||||
|
@ -13,6 +13,7 @@ CHANGELOG
|
|||||||
|
|
||||||
* deprecated `DataCollector::varToString()`, use `cloneVar()` instead
|
* deprecated `DataCollector::varToString()`, use `cloneVar()` instead
|
||||||
* changed surrogate capability name in `AbstractSurrogate::addSurrogateCapability` to 'symfony'
|
* changed surrogate capability name in `AbstractSurrogate::addSurrogateCapability` to 'symfony'
|
||||||
|
* Added `ControllerArgumentValueResolverPass`
|
||||||
|
|
||||||
3.1.0
|
3.1.0
|
||||||
-----
|
-----
|
||||||
|
@ -0,0 +1,48 @@
|
|||||||
|
<?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\HttpKernel\DependencyInjection;
|
||||||
|
|
||||||
|
use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
|
||||||
|
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gathers and configures the argument value resolvers.
|
||||||
|
*
|
||||||
|
* @author Iltar van der Berg <kjarli@gmail.com>
|
||||||
|
*/
|
||||||
|
class ControllerArgumentValueResolverPass implements CompilerPassInterface
|
||||||
|
{
|
||||||
|
use PriorityTaggedServiceTrait;
|
||||||
|
|
||||||
|
private $argumentResolverService;
|
||||||
|
private $argumentValueResolverTag;
|
||||||
|
|
||||||
|
public function __construct($argumentResolverService = 'argument_resolver', $argumentValueResolverTag = 'controller.argument_value_resolver')
|
||||||
|
{
|
||||||
|
$this->argumentResolverService = $argumentResolverService;
|
||||||
|
$this->argumentValueResolverTag = $argumentValueResolverTag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function process(ContainerBuilder $container)
|
||||||
|
{
|
||||||
|
if (!$container->hasDefinition($this->argumentResolverService)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$container
|
||||||
|
->getDefinition($this->argumentResolverService)
|
||||||
|
->replaceArgument(1, new IteratorArgument($this->findAndSortTaggedServices($this->argumentValueResolverTag, $container)))
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,67 @@
|
|||||||
|
<?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\HttpKernel\Tests\DependencyInjection;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
use Symfony\Component\DependencyInjection\Definition;
|
||||||
|
use Symfony\Component\DependencyInjection\Reference;
|
||||||
|
use Symfony\Component\HttpKernel\Controller\ArgumentResolver;
|
||||||
|
use Symfony\Component\HttpKernel\DependencyInjection\ControllerArgumentValueResolverPass;
|
||||||
|
|
||||||
|
class ControllerArgumentValueResolverPassTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testServicesAreOrderedAccordingToPriority()
|
||||||
|
{
|
||||||
|
$services = array(
|
||||||
|
'n3' => array(array()),
|
||||||
|
'n1' => array(array('priority' => 200)),
|
||||||
|
'n2' => array(array('priority' => 100)),
|
||||||
|
);
|
||||||
|
|
||||||
|
$expected = array(
|
||||||
|
new Reference('n1'),
|
||||||
|
new Reference('n2'),
|
||||||
|
new Reference('n3'),
|
||||||
|
);
|
||||||
|
|
||||||
|
$definition = new Definition(ArgumentResolver::class, array(null, array()));
|
||||||
|
$container = new ContainerBuilder();
|
||||||
|
$container->setDefinition('argument_resolver', $definition);
|
||||||
|
|
||||||
|
foreach ($services as $id => list($tag)) {
|
||||||
|
$container->register($id)->addTag('controller.argument_value_resolver', $tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
(new ControllerArgumentValueResolverPass())->process($container);
|
||||||
|
$this->assertEquals($expected, $definition->getArgument(1)->getValues());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testReturningEmptyArrayWhenNoService()
|
||||||
|
{
|
||||||
|
$definition = new Definition(ArgumentResolver::class, array(null, array()));
|
||||||
|
$container = new ContainerBuilder();
|
||||||
|
$container->setDefinition('argument_resolver', $definition);
|
||||||
|
|
||||||
|
(new ControllerArgumentValueResolverPass())->process($container);
|
||||||
|
$this->assertEquals(array(), $definition->getArgument(1)->getValues());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testNoArgumentResolver()
|
||||||
|
{
|
||||||
|
$container = new ContainerBuilder();
|
||||||
|
|
||||||
|
(new ControllerArgumentValueResolverPass())->process($container);
|
||||||
|
|
||||||
|
$this->assertFalse($container->hasDefinition('argument_resolver'));
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user