我有两个插件,都使用相同的事件Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout插件在插件A,通过一个变量聪明,并需要为我的其他插件变量。但是插件B在插件A之前运行,所以我设置了优先级,并用var_dump()对其进行了测试;
插件A:
public static function getSubscribedEvents()
{
return [
'Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout' => array('onCheckout', 1)
];
}
public function onPostDispatchCheckout(\Enlight_Event_EventArgs $args)
{
var_dump("Plugin A");
}插件B:
public static function getSubscribedEvents()
{
return [
'Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout' => array('onCheckout', 2)
];
}
public function onPostDispatchCheckout(\Enlight_Event_EventArgs $args)
{
var_dump("Plugin B");
}现在当我运行它时,输出是:
plugin B, Plugin A但是插件A必须先运行,我做错了什么?谢谢
发布于 2022-05-27 11:00:42
数字越高,执行订阅者越早。所以你必须改变优先次序。
插件A:
public static function getSubscribedEvents()
{
return [
'Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout' => array('onCheckout', 2)
];
}
public function onPostDispatchCheckout(\Enlight_Event_EventArgs $args)
{
var_dump("Plugin A");
}插件B:
public static function getSubscribedEvents()
{
return [
'Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout' => array('onCheckout', 1)
];
}
public function onPostDispatchCheckout(\Enlight_Event_EventArgs $args)
{
var_dump("Plugin B");
}发布于 2022-07-05 17:04:44
正如Pawel提到的,您可以在事件订阅中设置优先级。有两个语法可以实现这一点。
事件=>订阅者=>优先级
'Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout‘=> 'onCheckout’=> 1
或
事件=>订阅者,优先级
'Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout‘=> 'onCheckout',1
据我所知,像z指数一样,越高的指数就越好。您可能需要重新安装插件并清除缓存。
https://stackoverflow.com/questions/72403993
复制相似问题