Symfony2: Zmień renderowany widok za pomocą słuchacza

Chciałbym renderować różne widoki w innym kontekście w moim projekcie Symfony2. Używam wielu tras do tych samych akcji i chciałbym renderować inną stronę (widok), ale z tym samym kontrolerem. Na przykład mam:

@Route("/articles/show", name="articles_show")
@Route("/mobile/articles/show", name="mobile_articles_show")

Obie trasy używająta sama akcja : ArticlesController: showAction (), ale powinien renderować 2 różne szablony (dla użytkowników mobilnych i stałych).

show.html.twig
mobile.show.html.twig

Nie chcę używać instrukcji if ani niczego w moim kontrolerze, więc utworzyłem detektor (podobny do funkcji preExecute)

Oto część lub mojaconfig.yml to określa mojesłuchacz

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 }

Myślałem o zrobieniu czegoś takiego u słuchaczafunkcja preExecute:

if(substr($route,0,7) == 'mobile_'){
    $view = 'mobile.'.$view;
}

Niestety nie mogę znaleźć sposobu$ view lub zaktualizuj widok „w locie”, tuż przed jego wyświetleniem.

Mam nadzieję, że moje pytanie jest wystarczająco jasne, z góry dzięki, każdy pomysł jest mile widziany :)

JOT.

questionAnswers(4)

yourAnswerToTheQuestion