1 | <?php |
||
18 | final class ReplaceControllerResolverPass implements CompilerPassInterface |
||
19 | { |
||
20 | /** |
||
21 | * @var string |
||
22 | */ |
||
23 | const CONTROLLER_RESOLVER_SERVICE_NAME = 'controller_resolver'; |
||
24 | |||
25 | /** |
||
26 | * @var ControllerClassMapInterface |
||
27 | */ |
||
28 | private $controllerClassMap; |
||
29 | |||
30 | /** |
||
31 | * @var bool |
||
32 | */ |
||
33 | private $isControllerResolverAliased = false; |
||
34 | |||
35 | 2 | public function __construct(ControllerClassMapInterface $controllerClassMap) |
|
36 | { |
||
37 | 2 | $this->controllerClassMap = $controllerClassMap; |
|
38 | 2 | } |
|
39 | |||
40 | /** |
||
41 | * {@inheritdoc} |
||
42 | */ |
||
43 | 2 | public function process(ContainerBuilder $containerBuilder) |
|
44 | { |
||
45 | 2 | $controllerResolverServiceName = $this->getCurrentControllerResolverServiceName($containerBuilder); |
|
46 | |||
47 | 2 | if ($this->isControllerResolverAliased) { |
|
48 | 2 | $definition = $this->createDefinitionWithDecoratingResolver($controllerResolverServiceName); |
|
49 | |||
50 | 2 | $containerBuilder->setDefinition('default.controller_resolver', $definition); |
|
51 | } else { |
||
52 | $oldResolver = $containerBuilder->getDefinition($controllerResolverServiceName); |
||
53 | $containerBuilder->setDefinition('old.'.$controllerResolverServiceName, $oldResolver); |
||
54 | $containerBuilder->removeDefinition($controllerResolverServiceName); |
||
55 | |||
56 | $definition = $this->createDefinitionWithDecoratingResolver('old.'.$controllerResolverServiceName); |
||
57 | |||
58 | $containerBuilder->setDefinition('symplify.autowire_controller_controller_resolver', $definition); |
||
59 | $containerBuilder->setAlias( |
||
60 | $controllerResolverServiceName, |
||
61 | new Alias('symplify.autowire_controller_controller_resolver', true) |
||
62 | ); |
||
63 | } |
||
64 | 2 | } |
|
65 | |||
66 | /** |
||
67 | * @return string |
||
68 | */ |
||
69 | 2 | private function getCurrentControllerResolverServiceName(ContainerBuilder $containerBuilder) |
|
70 | { |
||
71 | 2 | if ($containerBuilder->hasAlias(self::CONTROLLER_RESOLVER_SERVICE_NAME)) { |
|
72 | 2 | $this->isControllerResolverAliased = true; |
|
73 | 2 | $alias = $containerBuilder->getAlias(self::CONTROLLER_RESOLVER_SERVICE_NAME); |
|
74 | |||
75 | 2 | return (string) $alias; |
|
76 | } |
||
77 | |||
78 | return self::CONTROLLER_RESOLVER_SERVICE_NAME; |
||
79 | } |
||
80 | |||
81 | /** |
||
82 | * @param string $controllerResolverServiceName |
||
83 | * |
||
84 | * @return Definition |
||
85 | */ |
||
86 | 2 | private function createDefinitionWithDecoratingResolver($controllerResolverServiceName) |
|
97 | } |
||
98 |