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

是否有任何事件在发送给浏览器的响应之前立即派遣?

有帮助吗?

解决方案

在渲染内容之前,在Magento 1.x中派遣的最后一个事件是

controller_front_send_response_after

如果您需要的观察者数据中没有额外的要求,那么这应该非常适合您。

其他提示

在页面请求/操作期间找到事件的一个方便技巧是临时编辑app/mage.php并写出射击的事件,以var/log/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;
    }

然后尾随日志文件。我发现这种方法非常有用,并节省了很多时间来寻找该难以捉摸的事件。

自然,您应该立即将其删除,因为您不想提交更改的核心文件。我将其包装到开发人员检查中,以防万一。

许可以下: CC-BY-SA归因
scroll top