Добавление пространства имен динамически - PullRequest
0 голосов
/ 25 января 2020

Вот как я вызываю контроллеры везде, где они нужны.

$file = 'App/Controller/' . $controller . '.php';

if (is_file($file)) {

    include_once($file);

    $namespace = 'App\Controller\\';
    $relative_controller = $namespace . $controller;
    $relative_controller = new $relative_controller();

    if (is_callable(array($relative_controller, 'index'))) {
        return call_user_func(array($relative_controller, 'index'));
    } else {
        echo 'Function not callable';
    }

} else {
    echo 'file missing';
}

Все мои контроллеры / классы имеют пространство имен , определенное, как вы можете видеть в приведенном выше коде в строке 4, где он говорит $namespace = 'App\Controller\\', и мне только нужно было передать имя контроллера (HomeController, AboutController, UserController), чтобы вызвать их, это работает хорошо.

В последнее время становится громоздко, когда все контроллеры (больше и все больше контроллеров выскакивает) в одном каталоге, поэтому я решил переместить их в подкаталоги, такие как

App/Controller/Information
App/Controller/User

, но если я начну перемещать эти контроллеры в соответствующие каталоги, пространство имен также изменится. Теперь каждый контроллер будет иметь свое имя подкаталога в своем пространстве имен (в отличие от всех, имеющих одно и то же пространство имен «App \ Controller»).

Как теперь динамически включать пространство имен в загрузчик (код выше), где ранее это было только одно пространство имен, выполняющее всю работу?

Если я переместу информацию о нас, свяжитесь с нами, контроллером политики в разделе 'App/Controller/Information', пространство имен изменится с App \ Controller на App \ Controller \ информация .

1 Ответ

0 голосов
/ 25 января 2020

«Маршрутизация» ... как я понимаю, есть только два способа ..

  • сделать предположение и потенциально получить неправильный контроллер, найдя все классы, расширяющие базу Controller учебный класс.
  • установить схему маршрутизации в YML или что-то в этом роде: /contact-us/$Action/$OtherAction: App\Controller\Information\ContactUsController.php.

Тогда ваше ядро ​​может проверить, совпадает ли маршрут, если не продолжать обрабатывать его нормально (согласно вашему коду) или 404.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...