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.