Passed
Push — master ( aa1e46...8f73fe )
by n
01:50
created

ControllerFactory   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 6
eloc 15
dl 0
loc 38
ccs 0
cts 21
cp 0
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A create() 0 20 5
A __construct() 0 3 1
1
<?php
2
3
namespace N1215\CakeCandle\Http;
4
5
use Cake\Controller\Controller;
6
use Cake\Http\Response;
7
use Cake\Http\ServerRequest;
8
use N1215\CakeCandle\ContainerBagInterface;
9
use ReflectionClass;
10
11
/**
12
 * Factory method for building controllers from request/response pairs.
13
 */
14
class ControllerFactory extends \Cake\Http\ControllerFactory
15
{
16
    /**
17
     * @var ContainerBagInterface
18
     */
19
    private $containerBag;
20
21
    /**
22
     * @param ContainerBagInterface $containerBag
23
     */
24
    public function __construct(ContainerBagInterface $containerBag)
25
    {
26
        $this->containerBag = $containerBag;
27
    }
28
29
    /**
30
     * @inheritdoc
31
     */
32
    public function create(ServerRequest $request, Response $response)
33
    {
34
        $className = $this->getControllerClass($request);
35
        if (!$className) {
36
            $this->missingController($request);
37
        }
38
        $reflection = new ReflectionClass($className);
39
        if ($reflection->isAbstract() || $reflection->isInterface()) {
40
            $this->missingController($request);
41
        }
42
43
        /** @var Controller $controller */
44
        $controller = $this->containerBag->get($className);
45
        if (!empty($request->getParam('controller'))) {
46
            $controller->setName($className);
47
        }
48
        $controller->setRequest($request);
49
        $controller->setResponse($response);
50
51
        return $controller;
52
    }
53
}
54