Конфигурация класса в зависимости от маршрута

Обсуждаем, как правильно строить приложения
Ответить
sterh404
Сообщения: 2
Зарегистрирован: 2017.12.02, 12:53

Конфигурация класса в зависимости от маршрута

Сообщение sterh404 » 2018.02.24, 10:24

Делаю CMS - учебно-иследовательский проект. Возникла необходимость настройки компонентов в зависимости от текущего маршрута. Именно от маршрута, а не от запроса.
В простейшем случае такой маршруто-зависимый класс - шаблонизатор. Разный 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);
конфигурация di:

Код: Выделить всё

	$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;
		});
Вроде не плохо, но чувствую что-то не то делаю.

Nex-Otaku
Сообщения: 809
Зарегистрирован: 2016.07.09, 21:07

Re: Конфигурация класса в зависимости от маршрута

Сообщение Nex-Otaku » 2018.02.24, 13:21

На базе второго варианта:

1. Делаем универсальную общую механику "выбор лэйаута по маршруту", выносим в компонент N.

2. Под каждый модуль приложения делаем свои настройки соответствия маршрутов лэйаутам.

3. В настройках компонента N перечисляем классы настроек для модулей, либо, что ещё универсальней, автоматически регистрируем их в бутстрапе приложения.

sterh404
Сообщения: 2
Зарегистрирован: 2017.12.02, 12:53

Re: Конфигурация класса в зависимости от маршрута

Сообщение sterh404 » 2018.02.24, 15:05

Не совсем понятно что вы предлагаете. Такое где-нибудь реализовано? Или это просто теоретические рассуждения?

Ответить