在控制器操作之前执行代码

时间:2012-06-06 11:20:22

标签: symfony

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

3 个答案:

答案 0 :(得分:26)

Symfony2中没有预操作方法。您必须为此目的使用event listeners

答案 1 :(得分: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方法在容器设置后执行某些任务。

答案 2 :(得分:11)