一、插件(plguin)介绍
Magento 2插件是一个技术插件,可帮助您更好地编写代码。拦截插件是 magento 2的一个扩展,它允许通过拦截函数调用并在函数调用之前或之后或周围运行代码来编辑任何公共类或方法的行为。通过使用此 Magento 2插件拦截,您可以修改类的行为,而无需直接更改类
二、插件的不能修改的
1、在 Magento\Framework\Interception 引导之前实例化的对象
2、Final 方法
3、Final 类
4、类中包含至少一个final公共方法
4、不是公开(public)方法
5、类的方法例如(静态方法)
6、构造方法(__construct)
7、Virtual types(在di.xml定义的)
三、插件方法类型
1、before方法
Magento在调用观察方法之前先运行所有之前的方法。这些方法必须与观察到的方法具有相同的名称,并且前缀为“ before”。
2、after 方法
Magento在观察到的方法完成之后运行所有以下方法。Magento要求这些方法具有返回值,并且它们必须与观察到的方法具有相同的名称,并以“ after”作为前缀。
3、around 方法
after方法可以访问其观察到的方法的所有参数。当观察到的方法完成时,Magento将结果和参数传递给随后的下一个方法。如果观察到的方法未返回结果(@return void),则它将null值传递给后一个方法。
四、使用例子
1、首先、在di.xml文件插件
<type name="Magento\Sales\Controller\Adminhtml\Order\AddComment">
<plugin name="Superkind_PaymentExt_AddComment_Plugin" type="Superkind\PaymentExt\Plugin\AddCommentPlugin" sortOrder="10" disabled="false"/>
</type>
2、然后在模块目录新建一个Plguin的文件,新一个AddCommentPlugin
例如要实现before方法就
public function beforeExecute(\Magento\Sales\Controller\Adminhtml\Order\AddComment $subject){
}
就可以对对象的方法进行修改参数或者进行验证