Completed
Push — master ( 8f73fe...6ae017 )
by n
01:58
created

ControllerFactory::create()   A

Complexity

Conditions 5
Paths 8

Size

Total Lines 23
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 13
CRAP Score 5.0592

Importance

Changes 0
Metric Value
eloc 13
dl 0
loc 23
ccs 13
cts 15
cp 0.8667
rs 9.5222
c 0
b 0
f 0
cc 5
nc 8
nop 2
crap 5.0592
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 Psr\Container\ContainerExceptionInterface;
10
use ReflectionClass;
11
12
/**
13
 * Factory method for building controllers from request/response pairs.
14
 */
15
class ControllerFactory extends \Cake\Http\ControllerFactory
16
{
17
    /**
18
     * @var ContainerBagInterface
19
     */
20
    private $containerBag;
21
22
    /**
23
     * @param ContainerBagInterface $containerBag
24
     */
25 5
    public function __construct(ContainerBagInterface $containerBag)
26
    {
27 5
        $this->containerBag = $containerBag;
28 5
    }
29
30
    /**
31
     * @inheritdoc
32
     */
33 5
    public function create(ServerRequest $request, Response $response)
34
    {
35 5
        $className = $this->getControllerClass($request);
36
37 5
        if (!$className) {
38 2
            $this->missingController($request);
39
        }
40 3
        $reflection = new ReflectionClass($className);
41 3
        if ($reflection->isAbstract() || $reflection->isInterface()) {
42 1
            $this->missingController($request);
43
        }
44
45
        /** @var Controller $controller */
46
        try {
47 2
            $controller = $this->containerBag->get($className);
48 2
        } catch (ContainerExceptionInterface $e) {
49 1
            throw $e;
50
        }
51
52 1
        $controller->setRequest($request);
53 1
        $controller->setResponse($response);
54
55 1
        return $controller;
56
    }
57
}
58