在将内容发送到浏览器之前调度的最后一个事件是什么?


11

我需要设置或更新cookie,但是我想确保所有(或尽可能多的)请求处理都在我的cookie生成代码运行之前发生。例如,如果用户登录,我想确保在我的代码运行之前已经进行了登录处理,或者如果用户向其购物车中添加了一些东西,我想知道所有购物车处理都首先完成。

在将响应发送到浏览器之前是否立即调度任何事件?

Answers:


11

呈现内容之前,Magento 1.x中调度的最后一个事件是

controller_front_send_response_after

如果您不需要观察者数据中的额外要求,那么这对您来说将是完美的。


3
实际上,“ controller_front_send_response_before”看起来像我所需要的。感谢您指出正确的方向!
Jim OHalloran 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
您还可以启用Profiler,它为您提供有关页面加载中发生的情况的详细信息。触发的所有事件也会在该处回显。
Rick Kuipers 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.