如果启用了“全页缓存”,则不会触发Enterprise Edition Controller事件

时间:2011-01-19 12:42:57

标签: magento

因此,在我们最近的一次发布中,我们收到了很多我们观察过的事件,例如controller_action_predispatch。一旦网站上线,我们就开始注意到我们的观察者从未被人们召集过。经过一番调查后,我们的一位开发人员在第292行的Mage_Core_Model_App中找到了这段代码

if ($this->_cache->processRequest()) {
            $this->getResponse()->sendResponse();
        } else {
            $this->_initModules();
            $this->loadAreaPart(Mage_Core_Model_App_Area::AREA_GLOBAL, Mage_Core_Model_App_Area::PART_EVENTS);

            if ($this->_config->isLocalConfigLoaded()) {
                $this->_initCurrentStore($scopeCode, $scopeType);
                $this->_initRequest();
                Mage_Core_Model_Resource_Setup::applyAllDataUpdates();
            }

            $this->getFrontController()->dispatch();
        }

正如您所看到的那样,$ this-> _cache-> processRequest()是真的,当启用整页缓存时,您永远不会进入调度。开发人员确实找到了http_response_send_before,它可以通过任何方式进行调用,但在我看来,这是一个错误,或者如果您启用了完整页面缓存,则不应该使用这些控制器调度事件。有什么想法吗?

4 个答案:

答案 0 :(得分:7)

鉴于整页缓存的性质,我称之为“按预期工作”。虽然没有一些事件发射可能有点奇怪,但是他们不得不选择一条线,这对我来说很有意义,特别是因为控制器从未真正发送过。

您应该将这些控制器调度事件用于影响页面的任何事情(因为它仍然需要生成),但是如果您使用它进行跟踪等等,那么它就不适合。

答案 1 :(得分:4)

如果您想了解Caching如何与Magento Enterprise配合使用,请参阅此处

http://magentophp.blogspot.com/2011/02/magento-enterprise-full-page-caching.html

答案 2 :(得分:1)

在启用和不启用整页缓存的情况下,唯一可靠的监听的事件是http_response_send_before

答案 3 :(得分:0)

controller_front_send_response_before

无论启用了FPC,都会触发此事件