Я хотел бы отображать разные представления в другом контексте в моем проекте Symfony2. Я использую несколько маршрутов для одних и тех же действий и хотел бы отобразить другую страницу (представление ), но с тем же контроллером. Например, у меня есть:
@Route("/articles/show", name="articles_show")
@Route("/mobile/articles/show", name="mobile_articles_show")
Оба маршрута используют одно и то же действие:ArticlesController :showAction (), но должен отображать 2 разных шаблона (для мобильных пользователей и обычных ).
show.html.twig
mobile.show.html.twig
Я не хочу использовать оператор if или что-то еще в моем контроллере, поэтому я создал прослушиватель (, похожий на функцию preExecute )
. Вот часть моего config.yml , которая определяет мой слушатель
services:
controller.pre_execute_listener:
class: MyProject\MyBundle\Listener\ControllerListener
arguments: ["@security.context", "@doctrine", "@router", "@session"]
tags:- { name: kernel.event_listener, event: kernel.controller, method: preExecute }
Я думал о том, чтобы сделать что-то подобное в функции слушателя preExecute:
if(substr($route,0,7) == 'mobile_'){
$view = 'mobile.'.$view;
}
К сожалению, я не могу найти способ получить $view или обновить представление "на лету", непосредственно перед его рендерингом.
Я надеюсь, что мой вопрос достаточно ясен, заранее спасибо, любые идеи приветствуются:)
Дж.