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を取得したりビューを「オンザフライ」で更新したりする方法を見つけることができません。
私の質問が十分に明確であることを願っています、事前に感謝します、どんなアイデアでも大歓迎です:)
J。