向每个控制器添加相同的FlashBag代码 - Symfony2

时间:2013-01-25 17:59:50

标签: symfony

我需要向每个控制器添加一个FlashBag代码$session->getFlashBag()->add('foo', $bar);,以及获取$bar所需的代码。我想知道是否有更好的方法然后复制+粘贴代码到每个控制器?会不会有某种主控制器?

2 个答案:

答案 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