私はSymfony 2を使用してプロジェクトを作成していますが、コントローラのアクションの前に呼び出されるZendのpreDispatchのようなメソッドが必要です。私はSymfonyで非常に新しく、ネットのサーフィンをして少し前にSymfonyの古いバージョンにpreExecuteメソッドがあることが判明しましたが、今は消えてしまいました。私の問題を解決するために何が使えますか?Symfony2のZend preDispatchメソッドの作成方法
ありがとうございます。
私はSymfony 2を使用してプロジェクトを作成していますが、コントローラのアクションの前に呼び出されるZendのpreDispatchのようなメソッドが必要です。私はSymfonyで非常に新しく、ネットのサーフィンをして少し前にSymfonyの古いバージョンにpreExecuteメソッドがあることが判明しましたが、今は消えてしまいました。私の問題を解決するために何が使えますか?Symfony2のZend preDispatchメソッドの作成方法
ありがとうございます。
symfony1のpreExecute()メソッドは非常に簡単ですが、あなたが言ったように、Symfony2では利用できません。幸いにも、Symfony2ではイベントにアクセスできます。このフレームワークは、アプリケーションのライフサイクル中に多数のイベントを送出します。 の一部は、イベントのの一部です - http://symfony.com/doc/2.0/book/internals.html#eventsです。
ウェブデバッグツールバーを使用して、どのイベントがディスパッチされているのか、またそのイベントをリッスンしているクラス(EventListeners)を見ることができます。上記のリンクも、あなたがそれに精通していない場合に備えて、イベントシステム全体について詳しく説明しています。
残念ながら、私はpreExecute機能を自分自身に模倣する必要はありませんでしたので、聞く必要があるイベントは正確にはわかりませんが、ドキュメントを読むことで、必要なものを正確に把握できます。
これが役に立ちます。
@Armsが私に示唆していたように、私はSymfony 2のイベントメカニズムを探求し始めました。コードを書き留めて、私の問題を解決しました(YAMLで行っているすべての設定です。 XMLやPHPでもやってください)。
まず、Symfonyの設定で、どんな種類のイベントを聞きたいのか、イベントが発生したときにカーネルが呼び出すべきものを記述する必要があります。オープン設定ファイルアプリ\ CONFIG \ config.ymlこのため、次のコードを追加:あなたのクラスは次のようにonKernelControllerメソッドを実装する必要があり
services:
younamespace.yourbundle.listener.preexecute:
class: Location\Of\Your\Listener\Class
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
を:このすべての後
public function onKernelController(FilterControllerEvent $event) {
if(HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
$controllers = $event->getController();
if(is_array($controllers)) {
$controller = $controllers[0];
if(is_object($controller) && method_exists($controller, 'preExecute')) {
$controller->preExecute();
}
}
}
}
をあなたのコントローラにpreExecuteメソッドを作成するときには、アクションを実行する前に呼び出されるので、変数の初期化やDBへの書き込みなどの前に、そのメソッドで多くのことを行うことができます。あなたはまた、詳細here構成を見ることができます
(この例では、kernel.requestイベントのためですが、それはあなたが理解するのを助けることができる)
楽しもう;)
ご提案をありがとう多くを、それが私を助けてくれました。 – haynar