Completed
Push — master ( 160447...ed6fd5 )
by Craig
05:41
created

ControllerResolver::createController()   B

Complexity

Conditions 7
Paths 6

Size

Total Lines 26
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
eloc 14
nc 6
nop 1
dl 0
loc 26
rs 8.8333
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Zikula package.
7
 *
8
 * Copyright Zikula Foundation - https://ziku.la/
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Zikula\Bundle\CoreBundle\Controller;
15
16
use InvalidArgumentException;
17
use Symfony\Bundle\FrameworkBundle\Controller\ControllerResolver as BaseControllerResolver;
18
use Zikula\Bundle\CoreInstallerBundle\Controller\AbstractController as InstallerController;
19
use Zikula\Core\Controller\AbstractController;
20
21
/**
22
 * Class ControllerResolver.
23
 */
24
class ControllerResolver extends BaseControllerResolver
25
{
26
    protected function createController($controller)
27
    {
28
        if (false === mb_strpos($controller, '::')) {
29
            return parent::createController($controller);
30
        }
31
32
        list($class, $method) = explode('::', $controller, 2);
33
        if (true === mb_strpos($class, '\\') && !class_exists($class)) {
34
            // class is a FqCN (contains `\`) and class does not exist
35
            throw new InvalidArgumentException(sprintf('Class "%s" does not exist.', $class));
36
        }
37
38
        // Own logic
39
        if (is_subclass_of($class, InstallerController::class)) {
40
            $controller = new $class($this->container);
41
        } elseif (is_subclass_of($class, AbstractController::class)) {
42
            $controller = $this->container->get($class);
43
            if (method_exists($controller, 'setContainer')) {
44
                $controller->setContainer($this->container);
45
            }
46
        } else {
47
            $controller = $this->instantiateController($class);
48
        }
49
        // End own logic
50
51
        return [$controller, $method];
52
    }
53
}
54