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

ControllerResolver   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 28
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 15
dl 0
loc 28
rs 10
c 0
b 0
f 0
wmc 7

1 Method

Rating   Name   Duplication   Size   Complexity  
B createController() 0 26 7
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