ubernoob
@ubernoob

Как из роутера передать данные дальше?

В файле index.php вызывается роутер
$Route = new Router();
$Route->analyse($_SERVER['REQUEST_URI']);

После обработки его ответ можно передать уже в само приложение:
$App = new App($Route);
Но в этом случае я так понял нарушается правило единой точки входа.

Это архитектурно не верно и роутер лучше делать как метод класса самого приложения? Как во фреймворке:
$app->get('/ticket/{id}', function (Request $request, Response $response, $args) {
        //....
        return $response;
    });

Но в этом случае если путей по сайту много довольно объемный код получается с перечислением всех вариантов роутинга.
  • Вопрос задан
  • 174 просмотра
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Читаем про инверсию контроля (Inversion of Control) что бы разобраться что кто и когда должен вызывать. Так же разберитесь где приложение а где его границы и что не входит непосредственно в это понятие (роутеры, контроллеры, шаблонизаторы и т.д.). Ну последнее это если вы хотите знать как правильно, для "бложиков" такое явное разделение не обязательно.

После обработки его ответ можно передать уже в само приложение:


Приложение ничего не должно знать о роутере, более того, оно должно иметь возможность существования без оного. Ваш роутер должен на основе своих правил вызвать метод приложения, обычно контроллера, который представляет собой прослойку между приложением и UI (в нашем случае HTTP).

Но в этом случае если путей по сайту много довольно объемный код получается с перечислением всех вариантов роутинга.


Просто не нужно использовать такой подход для задания конфигурации роутера. Используйте массивчики, декларативный способ задания конфигов. Тогда их можно инклудить, экстендить и крутить вертеть как угодно, давай гибкость управления всем этим добром.

Но да, вы должны описать все маршруты явно, так потом будет удобнее работать, особенно на проектах где маршрутов этих реально много.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы