0

прописал в роутере строчку, по которой он должен вызывать контроллер и его методы, но это не работает, что я делаю не так?

<?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 . '\/?$/' =&gt; ['controller' =&gt; 'home\\HomeController', 'action' =&gt; 'index'],
    '/^\/' . APP_BASE_PATH . '\/users(\/(?P&lt;action&gt;[a-z]+)(\/(?P&lt;id&gt;\d+))?)?$/' =&gt; ['controller' =&gt; 'users\\UsersController'],
    '/^\/' . APP_BASE_PATH . '\/auth(\/(?P&lt;action&gt;[a-z]+)(\/(?P&lt;id&gt;\d+))?)?$/' =&gt; ['controller' =&gt; 'auth\\AuthController'],
    '/^\/' . APP_BASE_PATH . '\/roles(\/(?P&lt;action&gt;[a-z]+)(\/(?P&lt;id&gt;\d+))?)?$/' =&gt; ['controller' =&gt; 'roles\\RolesController'],
    '/^\/' . APP_BASE_PATH . '\/pages(\/(?P&lt;action&gt;[a-z]+)(\/(?P&lt;id&gt;\d+))?)?$/' =&gt; ['controller' =&gt; 'pages\\PagesController'],
    '/^\/' . APP_BASE_PATH . '\/todo\/categories(\/(?P&lt;action&gt;[a-z]+)(\/(?P&lt;id&gt;\d+))?)?$/' =&gt; ['controller' =&gt; 'todo\\categories\\ToDoCategoriesController'],
    '/^\/' . APP_BASE_PATH . '\/todo\/tasks(\/(?P&lt;action&gt;[a-z]+)(\/(?P&lt;id&gt;\d+))?)?$/' =&gt; ['controller' =&gt; 'todo\\tasks\\ToDoTasksController'],
   ==&gt; Вот она '/^\/' . APP_BASE_PATH . '\/todo\/tasks\/tag(\/(?P&lt;id&gt;\d+))?$/' =&gt; ['controller' =&gt; 'todo\\tasks\\ToDoTasksController', 'action' =&gt; 'tasksByTag'], &lt;== Вот она
];

public function run()
{

    $uri = $_SERVER['REQUEST_URI'];
    $controller = null;
    $action = null;
    $params = null;

    foreach ($this-&gt;routes as $pattern =&gt; $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]);

}

}

А вот что я получаю: введите сюда описание изображения

0 Answers0