Symfony2 :Изменение отображаемого представления с помощью слушателя

Я хотел бы отображать разные представления в другом контексте в моем проекте 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 или обновить представление "на лету", непосредственно перед его рендерингом.

Я надеюсь, что мой вопрос достаточно ясен, заранее спасибо, любые идеи приветствуются:)

Дж.

8
задан Jonathan Hell 13 September 2012 в 09:26
поделиться