29

プロジェクト内のすべてのアクションの前にコードを実行したいと思います(重要なグローバル変数を計算するため)。コントローラでプレアクション機能を設定するにはどうすればよいですか?

4

3 に答える 3

28

Symfony2にはプレアクションメソッドはありません。そのためには、イベントリスナーを使用する必要があります。

于 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 に答える