Php 在加载页面之前执行代码的最佳方式是什么

Php 在加载页面之前执行代码的最佳方式是什么,php,events,caching,magento,Php,Events,Caching,Magento,基于,在Enterprise Edition Magento中,如果您计划启用整页缓存,那么使用任何可用的控制器事件似乎都不是一个好主意。看起来,只有在对实际页面执行操作时,您才希望使用这些事件 然而,我们已经为Magento构建了一些扩展,在控制器\u操作\u预处理上,我们有一个观察者,从那里我们获取URL中的一个参数,如果设置正确,我们从那里做一些额外的功能。例如,我们这样做是为了让客户可以将促销代码放在电子邮件活动的URL中,当他们单击该链接时,它会附加到客户的报价中。在加载页面之前,我们

基于,在Enterprise Edition Magento中,如果您计划启用整页缓存,那么使用任何可用的控制器事件似乎都不是一个好主意。看起来,只有在对实际页面执行操作时,您才希望使用这些事件

然而,我们已经为Magento构建了一些扩展,在
控制器\u操作\u预处理
上,我们有一个观察者,从那里我们获取URL中的一个参数,如果设置正确,我们从那里做一些额外的功能。例如,我们这样做是为了让客户可以将促销代码放在电子邮件活动的URL中,当他们单击该链接时,它会附加到客户的报价中。在加载页面之前,我们必须查找参数并执行我们的操作


但是现在有了这个完整的页面缓存,它就不能正常工作了。那么,不使用观察者而只是扩展代码可能更好吗?或者有更好的观察者来做这件事。我们尝试在一个事件之前使用HTTP send response,结果不一。

也许指令会有所帮助?

如果您找不到合适的事件,请请求一个,或者自己创建一个。可能扩展
企业页面缓存\u模型\u处理器
并检查其返回的内容,如果非空,则触发新事件。然后用一个观察者观看这两个事件。

如果您想继续投资于
controller\u action\u predispatch
事件,并在Magento框架中保存代码,您可以做几件事

  • 将URL参数添加到缓存密钥中。这样,FPC将为param可以触发的页面的不同版本提供服务,同时仍然提供缓存的好处。有关创建自己的PageCache容器并重写缓存键的示例,请参阅此

  • 从FPC中排除这些控制器。显然,只有当受影响的控制器是整个站点的子集时,这才有效,否则您将无法获得任何缓存好处

  • 干杯,
    JD

    您的代码是依赖于Magento还是可以是独立的php?想一想,如果你只是尝试记录一些东西,你可以使用总是被调用的
    register\u shutdown\u函数
    。这取决于Magento,我们想让它保持Magento的工作方式。我想就我的情况而言,我也可以简单地在查询sting中添加no\u缓存来阻止它缓存请求,但这似乎有点不确定,因为你必须确保创建链接的人记住这一点。