Completed
Push — master ( a0ddef...830497 )
by Park Jong-Hun
03:15
created

Dispatcher::buildRouterMap()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 7
rs 9.4285
cc 1
eloc 4
nc 1
nop 0
1
<?php
2
3
namespace Core\ControllerDispatcher;
4
5
use Prob\Handler\ProcInterface;
6
use Prob\Handler\ParameterMap;
7
use Psr\Http\Message\ServerRequestInterface;
8
use Prob\Router\Dispatcher as RouterDispatcher;
9
use Prob\Router\Matcher;
10
use Prob\Router\Map;
11
12
class Dispatcher
13
{
14
    /**
15
     * @var Map
16
     */
17
    private $routerMap;
18
19
    /**
20
     * @var ParameterMap
21
     */
22
    private $parameterMap;
23
24
    /**
25
     * @var ServerRequestInterface
26
     */
27
    private $request;
28
29
    public function setRouterMap(Map $routerMap)
30
    {
31
        $this->routerMap = $routerMap;
32
    }
33
34
    public function setRequest(ServerRequestInterface $request)
35
    {
36
        $this->request = $request;
37
    }
38
39
    public function setParameterMap(ParameterMap $parameterMap)
40
    {
41
        $this->parameterMap = $parameterMap;
42
    }
43
44
    public function dispatch()
45
    {
46
        $dispatcher = new RouterDispatcher($this->routerMap);
47
48
        /**
49
         * TODO 클로저와 일반함수 형태에서도 컨트롤러 이벤트가 작동하도록 수정해야함.
50
         */
51
52
        $this->triggerEvent('before');
53
54
        $result = $dispatcher->dispatch($this->request, $this->parameterMap);
55
56
        $this->triggerEvent('after');
57
58
        return $result;
59
    }
60
61
    private function triggerEvent($operation)
62
    {
63
        ControllerEvent::triggerEvent(
64
            RequestMatcher::getControllerProc()->getName(),
65
            $operation,
66
            [$this->parameterMap]
67
        );
68
    }
69
}
70