blob: 42fd3e1a9a1f0aef4f6a736d1f9c8e0c6f2a485a (
plain)
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
|
<?php
namespace App;
class Router {
private array $config;
private string $routesDir;
private array $statusHandlers = [];
function __construct(string $routesDir, array $config) {
$this->routesDir = $routesDir;
$this->config = $config;
}
function registerStatusHandler(int $status, callable $handler) {
$this->statusHandlers[$status] = $handler;
}
private function dealWithError(int $status, string $path) {
http_response_code($status);
if (isset($this->statusHandlers[$status])) {
$this->statusHandlers[$status]($path);
} else {
echo '<p>' . $status . ' for ' . htmlspecialchars($path) . '</p>';
}
}
function dispatch(string $path) {
if (str_contains($path, '..')) {
$this->dealWithError(404, $path);
return;
}
if (file_exists($this->routesDir . $path . '.php')) {
require_once $this->routesDir . $path . '.php';
} elseif (file_exists($this->routesDir . $path . 'index.php')) {
require_once $this->routesDir . $path . 'index.php';
} else {
$this->dealWithError(404, $path);
return;
}
if (function_exists($_SERVER['REQUEST_METHOD'])) {
$_SERVER['REQUEST_METHOD']($this->config);
} else {
$this->dealWithError(405, $path);
}
}
}
|