В простейшем случае такой маршруто-зависимый класс - шаблонизатор. Разный layout в зависимости от маршрута. В проекте и другие маршруто-зависимые компоненты.
Как грамотно организовать конфигурацию для такой настройки?
1. привязать нужные параметры к маршрутам
Код: Выделить всё
$router->get('post', 'post/{id}', 'PostHandler', 'AuthMiddleware', ['layout'=>'admin/layout']);
- дублирование кода. Конфигурация маршруто-зависимого класса размазана. что бы ответить на вопрос на каких страницах такой-то layout нужно просмотреть всю громоздкую конфигурацию маршрутов высматривая нужный параметр.
+ имена маршрутов не дублируются.
2. в конфигурации класса сделать route map
Код: Выделить всё
[
...
'View' => [
'temlateDir' => 'src/views',
'layoyut' => [
'post' => 'admin/layout',
'show' => 'front/layout',
...
],
...
],
...
]
- дублирование имен маршрутов
+ конфигурация класса в одном месте
Какие еще есть варианты?
Я пока остановился на первом варианте.
стартовый файл:
Код: Выделить всё
$ticket = $router->route($request);
$container->add(\Core\Ticket::class, $ticket);
$responce = $dispatcher->dispatch($ticket, $request);
Код: Выделить всё
$container->add('Core\View',
function (Container $container) use ($config){
$view = $container->newInstance('Core\View');
$view->setTemplateDir($config['view']['templateDir']);
$ticket = $container->get(Ticket::class);
$view->setRoute($ticket->getRoute());
$view->setLayout($ticket->getConfig()['layout']);
return $view;
});