Completed
Push — master ( 4b431b...9ea9f1 )
by Restu
15:27
created

Router::initialize()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 5
rs 9.4285
cc 1
eloc 3
nc 1
nop 2
1
<?php
2
namespace JayaCode\Framework\Core\Router;
3
4
use JayaCode\Framework\Core\Http\Request;
5
use JayaCode\Framework\Core\Http\Response;
6
7
class Router
8
{
9
    /**
10
     * @var array
11
     */
12
    public $routes = array(
13
        "home" => [
14
            "/",
15
            "HomeController",
16
            "index"
17
        ]
18
    );
19
20
    /**
21
     * @var Request
22
     */
23
    public $request;
24
25
    /**
26
     * @var Response
27
     */
28
    public $response;
29
30
    /**
31
     * Router constructor.
32
     * @param Request $request
33
     * @param Response $response
34
     */
35
    public function __construct(Request &$request = null, Response &$response = null)
36
    {
37
        $this->initialize($request, $response);
38
    }
39
40
    /**
41
     * initialize Router
42
     * @param Request $request
43
     * @param Response $response
44
     */
45
    public function initialize(Request &$request = null, Response &$response = null)
46
    {
47
        $this->request = &$request;
48
        $this->response = &$response;
49
    }
50
51
    /**
52
     * Create Router object from static function
53
     * @param Request $request
54
     * @param Response $response
55
     * @return Router
56
     */
57
    public static function create(Request &$request = null, Response &$response = null)
58
    {
59
        return new Router($request, $response);
60
    }
61
62
    /**
63
     * Handle request
64
     */
65
    public function handle()
66
    {
67
        $path = $this->request->path();
68
        $route = null;
69
70
        foreach ($this->routes as $key => $value) {
71
            if ($this->routes[$key][0] == $path) {
72
                $route = $this->routes[$key];
73
                break;
74
            }
75
        }
76
77
        if (!is_null($route)) {
78
            $controller_class = "App\\Controller\\" . $route[1];
79
            $controller = new $controller_class($this->request, $this->response);
80
81
            $content = $controller->$route[2]();
82
            $this->response->setContent($content);
83
        } else {
84
            $this->response->setStatusCode(404);
85
        }
86
87
        return $this->response;
88
    }
89
90
    /**
91
     * @return array
92
     */
93
    public function getRoutes()
94
    {
95
        return $this->routes;
96
    }
97
98
    /**
99
     * @param array $routes
100
     */
101
    public function setRoutes($routes)
102
    {
103
        $this->routes = $routes;
104
    }
105
}
106