在Magento 2中,当您创建“周围”插件时
public function aroundRenderResult(
\Magento\Framework\Controller\ResultInterface $subject,
\Closure $proceed,
ResponseHttp $response
) {
//...
$proceed($response);
//...
}
您可以继续进行下一个插件,最终通过调用/调用传入的$proceed
方法来调用实际的原始方法。这是一种常见的设计模式,通常在PHP Frameworks中间件实现中看到。
但是,它确实给实现细节带来了一些混乱。特别
如果除之外
aroundPlugin
,对象/类还定义了before
或after
插件,它们何时相对于周围的插件链触发?
即所有之前的方法会在所有周围的插件方法触发之前触发吗?或插件,然后将只火最终,实际前实际方法火灾?
我要跟踪的具体问题是,当Magento处于全页缓存模式时,我似乎无法获得与Magento 2前端控制器的调度方法相连的插件。全页缓存由不调用的环绕插件操作$proceed($response)
。我已经尝试研究这些插件的一些代码,并且发现系统很难在不知道插件打算如何工作的情况下进行推理。
即- 在此特定实例中,开发文档页面上的描述似乎不准确。尚不清楚文档是否错误,或者这是最近引入的错误,是否是边缘情况,或者我的插件配置是否错误。
是否有人通过直接观察或文化知识知道这种优先次序应该如何起作用?
\closure $proceed
vs. 时,您有经验法则\callable $proceed
吗?在官方文档只提到\callable
,从不触及\closure
。