Completed
Push — master ( dfea87...bbf397 )
by Tomáš
04:41
created

getCurrentControllerResolverServiceName()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 4
cts 4
cp 1
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 4
nc 2
nop 1
crap 2
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of Symplify
7
 * Copyright (c) 2015 Tomas Votruba (http://tomasvotruba.cz).
8
 */
9
10
namespace Symplify\ControllerAutowire\DependencyInjection\Compiler;
11
12
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
13
use Symfony\Component\DependencyInjection\ContainerBuilder;
14
use Symfony\Component\DependencyInjection\Definition;
15
use Symfony\Component\DependencyInjection\Reference;
16
use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface;
17
use Symplify\ControllerAutowire\Contract\DependencyInjection\ControllerClassMapInterface;
18
use Symplify\ControllerAutowire\HttpKernel\Controller\ControllerResolver;
19
20
final class DecorateControllerResolverPass implements CompilerPassInterface
21
{
22
    /**
23
     * @var string
24
     */
25
    const DEFAULT_CONTROLLER_RESOLVER_SERVICE_NAME = 'controller_resolver';
26
27
    /**
28
     * @var string
29
     */
30
    const SYMPLIFY_CONTROLLER_RESOLVER_SERVICE_NAME = 'symplify.controller_resolver';
31
32
    /**
33
     * @var ControllerClassMapInterface
34
     */
35
    private $controllerClassMap;
36
37 2
    public function __construct(ControllerClassMapInterface $controllerClassMap)
38
    {
39 2
        $this->controllerClassMap = $controllerClassMap;
40 2
    }
41
42 2
    public function process(ContainerBuilder $containerBuilder)
43
    {
44 2
        $decoratedControllerResolverServiceName = $this->getCurrentControllerResolverServiceName($containerBuilder);
45
46 2
        $definition = new Definition(ControllerResolver::class, [
47 2
            new Reference(self::SYMPLIFY_CONTROLLER_RESOLVER_SERVICE_NAME . '.inner'),
48 2
            new Reference('service_container'),
49 2
            new Reference('controller_name_converter'),
50
        ]);
51
52 2
        $definition->setDecoratedService($decoratedControllerResolverServiceName, null, 1);
53 2
        $definition->addMethodCall('setControllerClassMap', [$this->controllerClassMap->getControllers()]);
54 2
        $definition->setAutowiringTypes([ControllerResolverInterface::class]);
55
56 2
        $containerBuilder->setDefinition(self::SYMPLIFY_CONTROLLER_RESOLVER_SERVICE_NAME, $definition);
57 2
    }
58
59 2
    private function getCurrentControllerResolverServiceName(ContainerBuilder $containerBuilder) : string
60
    {
61 2
        if ($containerBuilder->has('debug.' . self::DEFAULT_CONTROLLER_RESOLVER_SERVICE_NAME)) {
62 1
            return 'debug.' . self::DEFAULT_CONTROLLER_RESOLVER_SERVICE_NAME;
63
        }
64
65 1
        return self::DEFAULT_CONTROLLER_RESOLVER_SERVICE_NAME;
66
    }
67
}
68