Теперь напишем диспетчер ядра, который будет создавать объект нужного контроллера и выполнять запрос, подставляя переменные
class page { function view($page){ echo 'Hello from Page\View page = ' . $page; } } class kernel { public $R; function __construct($default){ $this->R = new RouteDispatcher($default); } function define_routes($declarations){ foreach ($declarations as $classname => $pattern){ $this->R->add($classname, $pattern); } } function dispatch($path){ $w = $this->R->check($path); $c = $w['matches']['controller']; $m = $w['matches']['action']; $p = $w['matches']; $obj = new $c(); $obj->$m(extract($p)); } } $k = new Kernel('nowhere'); $k->define_routes( [ 'test' => "#^(?<controller>test)/(?<action>\w+)$#i", "site" => "#^(?<controller>site)/(?<action>\w+)$#i", "super" => "#^(?<controller>super)/(?<action>\w+)$#i", "view" => "#^(?<controller>page)/(?<action>\w+)/(?<page>\d+)$#i" ]); $path = 'page/view/100'; $k->dispatch($path);В данном случае у нас добавляется Kernel (ядро), единственная задача которого поднять нужный контроллер, вызвать в нем метод и сбагрить туда параметры. Также мы добавили класс page, который должен вывести приветствие и напечатать значение параметра. Проверим, запустив
php test-router.phpкак видим, контроллер получил нужные параметры и поприветствовал нас Теги документа