コンテンツがブラウザーに送信される前にディスパッチされる最後のイベントは何ですか?


11

Cookieを設定または更新する必要がありますが、Cookie生成コードが実行される前に、要求処理のすべて(または可能な限り)が確実に行われるようにしたいと考えています。つまり、ユーザーがログインした場合、コードの実行前にログイン処理が行われたことを確認したい、またはユーザーがカートに何かを追加した場合、すべてのカート処理が最初に行われることを知りたいです。

応答がブラウザーに送信される直前にディスパッチされるイベントはありますか?

回答:


11

コンテンツがレンダリングされる前にMagento 1.xでディスパッチされる最後のイベントは

controller_front_send_response_after

オブザーバーデータに必要な追加の要件がない場合は、これが最適です。


3
実際、「controller_front_send_response_before」は必要なもののように見えます。私を正しい方向に向けてくれてありがとう!
ジムオアロラン2013年

8

ページリクエスト/アクション中に発生したイベントを見つけるための便利なトリックは、一時的にapp / Mage.phpを編集して、発生したイベントをvar / log / system.logに書き出すことです。

 public static function dispatchEvent($name, array $data = array())
    {
        Varien_Profiler::start('DISPATCH EVENT:'.$name);
        $result = self::app()->dispatchEvent($name, $data);
        Varien_Profiler::stop('DISPATCH EVENT:'.$name);
        return $result;
    }

public static function dispatchEvent($name, array $data = array())
    {
        if(mage::getIsDeveloperMode()) {
           mage::log($name);
        }
        Varien_Profiler::start('DISPATCH EVENT:'.$name);
        $result = self::app()->dispatchEvent($name, $data);
        Varien_Profiler::stop('DISPATCH EVENT:'.$name);
        return $result;
    }

そして、ログファイルをテールします。私はこの方法が非常に役立つことを発見し、そのとらえどころのないイベントを使用するために多くの時間を節約できました。

変更されたコアファイルをコミットしたくないので、当然、すぐに削除する必要があります。念のため、開発者チェックに含めます。


2
プロファイラーを有効にすることもできます。これにより、ページの読み込みで何が発生するかについての広範な情報が得られます。トリガーされたすべてのイベントもそこでエコーされます。
リックカイパーズ2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.