hanze/iwa-panda1

Lollipop/Router.php in main
Repositories | Summary | Log | Files

Router.php (1262B) download


 1<?php
 2
 3namespace Lollipop {
 4	class Router
 5	{
 6		protected array $routes = [];
 7		protected string $path;
 8
 9		protected function match(string $match, array &$route_vars): bool
10		{
11			$route_split = explode('/', $this->path);
12			$match_split = explode('/', $match);
13
14			if (sizeof($route_split) != sizeof($match_split)) {
15				return false;
16			}
17
18			foreach ($match_split as $index => $m) {
19				if (str_starts_with($m, ':')) {
20					$route_vars[substr($m, 1)] = $route_split[$index];
21				} else if ($m != $route_split[$index]) {
22					return false;
23				}
24			}
25			return true;
26		}
27
28
29		function addRoute(string $method, string $match, callable $func)
30		{
31			$this->routes[] = array(
32				"method" => $method,
33				"match" => $match,
34				"func" => $func,
35			);
36		}
37
38		function route(string $base = null)
39		{
40			$this->path = $_SERVER["REQUEST_URI"];
41
42			if ($base && strpos($this->path, $base))
43				$this->path = explode($base, $this->path)[1];
44
45			$method = $_SERVER["REQUEST_METHOD"];
46
47			foreach ($this->routes as $route) {
48				if ($route["method"] != null && $route["method"] != $method)
49					continue;
50
51				$vars = [];
52				if ($this->match($route["match"], $vars))
53					return $route["func"]($vars);
54			}
55
56			echo "404 '$this->path' not found!";
57			return null;
58		}
59	}
60}