我需要向每个控制器添加一个FlashBag代码$session->getFlashBag()->add('foo', $bar);
,以及获取$bar
所需的代码。我想知道是否有更好的方法然后复制+粘贴代码到每个控制器?会不会有某种主控制器?
答案 0 :(得分:3)
我建议您创建一个将在您指定的每个控制器之前运行的侦听器。遵循本指南将显示设置所需的一切:
http://symfony.com/doc/2.0/cookbook/event_dispatcher/before_after_filters.html
答案 1 :(得分:0)
http://symfony2.ylly.fr/symfony2-simulate-preexecute-postexecute-filters-actions-jordscream/
你应该尝试实现一个服务并为onCoreController
注册它,然后执行$event->getController()->preAction()
(或你想要的任何函数名...),然后你可以在你需要的控制器中实现这些方法
类似
src/My/Bundle/RequestListener.php:
public function onCoreController(FilterControllerEvent $event) {
$evntController = $event->getController();
if (method_exists($evntController[0], 'beforeFilter')) {
$evntController[0]->beforeFilter();
}
}
在这里查看更多信息
http://symfony.com/doc/2.0/book/internals.html#the-event-dispatcher
http://symfony.com/doc/2.0/book/internals.html
http://symfony.com/doc/current/cookbook/service_container/event_listener.html