Symfony2: Changer le rendu de la vue avec un écouteur

Je tiens à rendre des points de vue différents dans un contexte différent dans mon projet Symfony2.
Je suis en utilisant de multiples voies pour les mêmes actions, et je voudrais afficher une autre page (vue), mais avec le même contrôleur.
Par exemple, j'ai:

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

Les deux voies utilisez la même action : contrôleur d'articles articlescontroller:showAction(), mais doit rendre des 2 différents modèles (pour les utilisateurs mobiles et les habitués).

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

Je ne veux pas utiliser une instruction if ou que ce soit dans mon contrôleur, j'ai donc créé un "listener" (similaire à un preExecute fonction)

Voici une partie ou mon config.yml qui définit mon auditeur

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 }

Je pensais faire quelque chose comme ça dans l'écouteur preExecute fonction:

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

Malheureusement je ne peux pas trouver un moyen d'obtenir $view ou de mise à jour de l'affichage "à la volée", juste avant le rendu.

J'espère que ma question est assez claire, merci d'avance, toute idée est la bienvenue 🙂

J.

OriginalL'auteur Jonathan Hell | 2012-08-20