<?php namespace Kernel\Classes; class Router { protected $routes = ["GET" => [], "POST" => []]; protected $err_404_handler; public function __construct() { $this -> err_404_handler = function(){ return "404"; }; } public function routing() :String { if(!isset($_GET["action"]) and !isset($_POST["action"])) { return response_prepared($this -> err_404_handler()); } $actions = [$_GET["action"] ?? "", $_POST["action"] ?? ""]; $results = []; foreach(["GET", "POST"] as $i => $method) { if(isset($this -> routes[$method][$actions[$i]])) { $results = array_merge($results, $this -> call_action_handlers($this -> routes[$method][$actions[$i]])); } } return response_prepared($results); } public function linking(String $method, String $action_name, $action) :bool { if(!in_array($method, ["GET", "POST"])) { return throw new Exception("Method `{$method}` no exists"); } if(!isset($this -> routes[$method][$action_name])) { $this -> routes[$method][$action_name] = []; } $this -> routes[$method][$action_name][] = $action; return true; } public function set_err_404($handler) { return $this -> err_404_handler = $handler; } public function call_action_handlers(Array $handlers) :Array { $results = []; foreach($handlers as $handler) { $results[] = $handler(); } return $results; } }