29

我想在我的项目中的所有操作之前执行代码(计算一个重要的全局变量)。如何在我的控制器中设置预操作功能?

4

3 回答 3

28

Symfony2 中没有pre-action方法。为此,您必须使用事件侦听器。

于 2012-06-06T11:59:43.867 回答
16

可能使用侦听器是实现“控制器初始化任务之后”的更优雅的方式,但有更简化的方式来实现:

use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Override method to call #containerInitialized method when container set.
 * {@inheritdoc}
 */
public function setContainer(ContainerInterface $container = null)
{
    parent::setContainer($container);
    $this->containerInitialized();
}

/**
 * Perform some operations after controller initialized and container set.
 */
private function containerInitialized()
{
     // some tasks to do...
}

将此代码插入到您的控制器中,或者,如果您愿意,您甚至可以将其插入到控制器的某些基本父级抽象中。

因为容器在初始化时会被设置到每个控制器,我们可以setContainer在容器设置后重写方法来执行一些任务。

于 2013-10-24T05:06:16.793 回答
11

你应该特别阅读这个文档页面:http ://symfony.com/doc/current/cookbook/event_dispatcher/before_after_filters.html

于 2013-04-03T10:53:12.590 回答