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

bux*_*bux 27 symfony

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

Sam*_*ane 27

Symfony2中没有预执行方法.您必须为此目的使用事件侦听器.

  • 该死的,好的.谢谢 ;) (4认同)

ple*_*ock 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...
}
Run Code Online (Sandbox Code Playgroud)

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

因为容器将在初始化时设置为每个控制器,我们可以覆盖setContainer容器设置后执行某些任务的方法.

  • @Benoît:你能解释一下为什么这么糟糕吗?非常感谢 ! (4认同)
  • 请不要这样做,这是一个非常非常非常糟糕的方法 (2认同)