#symfony #twig #symfony-routing
Вопрос:
Недавно, создавая свою CMS в Symfony, я столкнулся с проблемой. У меня есть 2 контроллера, publicationcontroller
и contactcontroller
. В обоих контроллерах экземпляр сущности Page
загружается всякий раз, когда совпадает соответствующий слиток. Ниже приведен код:
class ContactController extends AbstractController
{
/**
* @Route("/{slug}", name="contact")
*/
public function index(PageRetriever $pageRetriever, $slug)
{
$page = $pageRetriever->getPage($slug);
return $this->render('contact/index.html.twig', [
'page' => $page
]);
}
}
class PublicationController extends AbstractController
{
/**
* @Route("/{slug}", name="publications")
*/
public function index(PageRetriever $pageRetriever, $slug)
{
$page = $pageRetriever->getPage($slug);
return $this->render('publication/index.html.twig', [
'page' => $page
]);
}
}
Моя проблема в том, что и содержимое публикации, и контакт загружаются в один и тот же шаблон, в зависимости от того, какой контроллер инициализируется первым.
У кого-нибудь здесь есть идея или несколько советов о том, как загрузить правильный шаблон, в зависимости от того, какой слизень называется?
Любая надежда очень ценится
Ответ №1:
Symfony никак не может знать, какой контроллер следует вызывать. У вас один и тот же маршрут для обоих contact
и publication
контроллера.
Есть 2 возможных решения, которые я могу придумать.
1. Используйте разные маршруты
@Route("/publication/{slug}", name="publications")
@Route("/contact/{slug}", name="contact")
2. Используйте один контроллер, но напишите свою собственную логику для выбора шаблона
$page = $pageRetriever->getPage($slug);
if ($page->getType() === 'publication') {
return $this->render('publication/index.html.twig', [
'page' => $page
]);
}
return $this->render('contact/index.html.twig', [
'page' => $page
]);
Комментарии:
1. Я думаю, что вариант 2-это хороший первый шаг. Я постараюсь визуализировать шаблоны из подобной службы и постараюсь предоставить им собственные контроллеры