-
Notifications
You must be signed in to change notification settings - Fork 0
/
Router.php
96 lines (79 loc) · 1.73 KB
/
Router.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php
/**
* Created by PhpStorm.
* User: qasim
* Date: 2022-03-30
* Time: 11:09 AM
*/
namespace qasimlearner\laravelclone;
use qasimlearner\laravelclone\exceptions\NotFoundException;
class Router
{
// for PHP 7.4+
// protected array $routes = [
protected $routes = [
/*
* Example:
'get'=> [
'/'=> callback,
'/contact'=> callback
...
],
'post'=> [
'/add'=> callback,
...
]
*/
];
// for PHP 7.4+
// public Request $request;
public $request;
public $response;
public function __construct(Request $request, Response $response)
{
$this->request = $request;
$this->response = $response;
}
public function get($path, $callback)
{
$this->routes['get'][$path] = $callback;
}
public function post($path, $callback)
{
$this->routes['post'][$path] = $callback;
}
public function resolve()
{
// echo '<pre>';
// var_dump($_SERVER);
// echo '</pre>';
$path = $this->request->getPath();
$method = $this->request->method();
$callback = $this->routes[$method][$path] ?? false;
if($callback === false)
{
// Application::$app->response->setStatusCode(404);
// $this->response->setStatusCode(404);
// return $this->renderContent('Not found');
throw new NotFoundException();
return;
}
if(is_string($callback))
{
return Application::$app->view->renderView($callback);
}
if(is_array($callback))
{
Application::$app->controller = $callback[0] = new $callback[0]();
Application::$app->controller->action = $callback[1];
foreach (Application::$app->controller->getMiddlewares() as $middleware)
{
$middleware->execute();
}
}
return call_user_func($callback, $this->request, $this->response);
// echo '<pre>';
// var_dump($callback);
// echo '</pre>';
}
}