我想在我的 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。