当客户访问前端控制器时,我需要尽早在调度过程中启动事件。该请求将被分析,并可能被重定向到不同的URL,证明“尽早”的要求。
开发人员可以订阅的最早活动是什么?
答案 0 :(得分:19)
我最依赖的事件是
controller_front_init_before
Magento前端控制器对象(与“index.php前端控制器”不同)是管理路由器的对象,后者又管理动作控制器分派。
之前还有其他一些(resource_get_tablename
,core_collection_abstract_load_before
,core_collection_abstract_load_after
),但它们更多的是副作用(Magento使用它自己的系统自我引导)比任何你想要依赖的东西。
最后,正如应该经常指出的那样,如果你在app/Mage.php
public static function dispatchEvent($name, array $data = array())
{
file_put_contents('/tmp/events.log',"$name \n",FILE_APPEND);
Varien_Profiler::start('DISPATCH EVENT:'.$name);
$result = self::app()->dispatchEvent($name, $data);
#$result = self::registry('events')->dispatch($name, $data);
Varien_Profiler::stop('DISPATCH EVENT:'.$name);
return $result;
}
模式开始出现。
答案 1 :(得分:3)
您可能正在寻找controller_action_predispatch
事件。
之前有很多其他事件被触发,但在这种情况下,我假设你仍然想要访问调度的动作控制器。
如果您想要更早,那么您最好的选择是controller_front_init_before
,这是在前控制器初始化之前触发的。
答案 2 :(得分:2)
每个controller_action_predispatch和controller_action_postdispatch都有一个事件。要知道正在调用哪些操作,您可以添加以下行
Mage::log('controller_action_predispatch_'.$this->getFullActionName());
到preDispatch
app/code/core/Mage/Core/Controller/Varien/Action.php
函数
可以在同一文件中的postDispatch
函数中添加类似的行。
答案 3 :(得分:2)
经过一些惨淡的打击后,似乎已经启用了 Magento EE全页缓存 - 您可以监听的唯一可靠事件是http_response_send_before
。