прописал в роутере строчку, по которой он должен вызывать контроллер и его методы, но это не работает, что я делаю не так?
<?php
namespace app;
use app\controllers\auth\AuthController;
use app\controllers\home\HomeController;
use app\controllers\pages\PagesController;
use app\controllers\roles\RolesController;
use app\controllers\users\UsersController;
use app\controllers\todo\tasks\ToDoTasksController;
class Router
{
private $routes = [
'/^\/' . APP_BASE_PATH . '\/?$/' => ['controller' => 'home\\HomeController', 'action' => 'index'],
'/^\/' . APP_BASE_PATH . '\/users(\/(?P<action>[a-z]+)(\/(?P<id>\d+))?)?$/' => ['controller' => 'users\\UsersController'],
'/^\/' . APP_BASE_PATH . '\/auth(\/(?P<action>[a-z]+)(\/(?P<id>\d+))?)?$/' => ['controller' => 'auth\\AuthController'],
'/^\/' . APP_BASE_PATH . '\/roles(\/(?P<action>[a-z]+)(\/(?P<id>\d+))?)?$/' => ['controller' => 'roles\\RolesController'],
'/^\/' . APP_BASE_PATH . '\/pages(\/(?P<action>[a-z]+)(\/(?P<id>\d+))?)?$/' => ['controller' => 'pages\\PagesController'],
'/^\/' . APP_BASE_PATH . '\/todo\/categories(\/(?P<action>[a-z]+)(\/(?P<id>\d+))?)?$/' => ['controller' => 'todo\\categories\\ToDoCategoriesController'],
'/^\/' . APP_BASE_PATH . '\/todo\/tasks(\/(?P<action>[a-z]+)(\/(?P<id>\d+))?)?$/' => ['controller' => 'todo\\tasks\\ToDoTasksController'],
==> Вот она '/^\/' . APP_BASE_PATH . '\/todo\/tasks\/tag(\/(?P<id>\d+))?$/' => ['controller' => 'todo\\tasks\\ToDoTasksController', 'action' => 'tasksByTag'], <== Вот она
];
public function run()
{
$uri = $_SERVER['REQUEST_URI'];
$controller = null;
$action = null;
$params = null;
foreach ($this->routes as $pattern => $route) {
if (preg_match($pattern, $uri, $matches)) {
$controller = 'app\\controllers\\' . $route['controller'];
$action = $route['action'] ?? $matches['action'] ?? 'index';
$params = array_filter($matches, 'is_string', ARRAY_FILTER_USE_KEY);
break;
}
}
if (!$controller) {
http_response_code(404);
echo 'Страница не найдена';
return;
}
$controllerInstance = new $controller();
if (!method_exists($controllerInstance, $action)) {
http_response_code(404);
echo 'Страница не найдена';
return;
}
call_user_func_array([$controllerInstance, $action], [$params]);
}
}
