当前位置: 首页 > 后端技术 > PHP

Magento新手教程--什么是Plugin

时间:2023-03-29 14:46:09 PHP

MagentoMagento新手教程,教你如何入门Magento。在这篇文章中,我们将向Magento小白们讲解什么是Magento中的插件,Magento中通过插件可以实现哪些功能,以及具体在Magento系统中哪些地方使用了插件。希望本教程对Magento新手有所帮助。更多Magento新手教程请参考《Magento新手教程》我个人的理解是方法级别的中间件允许在代理方法前后做其他事情。主要有before、after和around方法。可以通过对比laravel或者其他框架中的中间件来理解,也可以类比设计模式中的装饰器模式,或者类比python中的装饰器,但仅限于方法层面。适用场景Plugin不能在以下类型使用FinalmethodFinalclass非公共方法类方法(如静态方法)__construct()VirtualTypesFramework\Interception启动前初始化的对象Plugin可以在以下情况使用classinterfaceabstractclassTheparentclass可以通过在Magento源代码中搜索module-payment/etc/frontend/di.xml中我们可以看到类似下面的内容Payment\Plugin\PaymentConfigurationProcess"/>Magento\Checkout\Block\Checkout\LayoutProcessor中的Magento\Checkout\Block\Checkout\LayoutProcessor在上述代码处理方法中通过插件的beforeProcess方法监控。publicfunctionprocess($jsLayout){//codeblockreturn$jsLayout;}beforeplugin是通过Magento\Payment\Plugin\PaymentConfigurationProcess类中的beforeProcess方法实现的。publicfunctionbeforeProcess(\Magento\Checkout\Block\Checkout\LayoutProcessor$processor,$jsLayout){//codeblock...return[$jsLayout];}aroundpluginaround插件函数允许我们在被监控方法之前和之后运行我们自己的代码的一部分。这个特性允许我们在改变输入参数的同时改变返回结果值。关于around插件,需要记住的几点是插件中的第一个参数是监听类的实例,插件中的第二个参数是可调用/闭包类型。通常写成callable$proceed,调用$proceed时的入参需要和被监控的方法参数一致。其余参数需要与监测方法一致。插件的返回值必须与原函数一致。通常直接返回$proceed(…)或者调用$returnValue=$proceed();然后直接return$returnValue;有时我们还需要修改$returnValue;让我们看一个around插件的例子。module-grouped-product/etc/di.xmlplugin监听aroundDeleteProductLink方法publicfunctionaroundDeleteProductLink(\Magento\GroupedProduct\Model\ResourceModel\Product\Link$subject,\Closure$proceed,$linkId){//其余代码...$result=$proceed($linkId);//剩下的代码...return$result;}afterpluginafter插件主要是执行被监控方法之后的一部分代码。plugin后面写的时候要注意以下几点:plugin的第一个参数是被监控类型的实例,plugin的第二个参数是被监控方法的执行结果,通常调用$result,也可以被监控调用在方法返回一个值之后。比如下面例子中的$data转载自:https://www.kancloud.cn/yuesi...