Magento 2的插件主要作用:在Magento 1中,为了自定义不同的类和方法,你可以重写一个类。 这是一个非常强大和灵活的定制平台的方式。 这也造成了麻烦,因为两个模块不可以重写同一个类, 重写冲突造成了Magento 1平台的不稳定。 Magento 2创建了一个新的自定义方法来解决这个问题。 它被称为插件。一个插件就是一个定制,允许用户在Magento 2中的类之前(before),之后(after)或全程(around)调用方法,并且插件之间可以有重合,这意味着多个模块可以在Magento 2中为同一个方法创建插件而不会引起冲突。

步骤一:按常规方法创建模组用于添加插件(或者在原有的模组里添加插件)
在app/code/<module dir>/etc的 di.xml 里添加以下代码:

 <type name="Magento\Quote\Model\Quote">  <!-- 要重写的目标类 -->
<plugin
disabled="false" <!-- 决定是否启用插件 -->
name="Bcn_Quote_Model_Plugin_Quote" <!-- 插件名字 -->
sortOrder="1" <!-- 插件执行排序,因为可能有好几个插件都重写了同一个方法,这有助于解决插件之间的冲突 -->
type="Bcn\Quote\Model\Plugin\Quote"/> <!-- 本插件类 -->
</type>

步骤二:创建插件类

注意:插件类不需要继承目标类的父类和构造方法,但是目标方法的参数要继承。实例代码如下:

 <?php

 namespace Bcn\Quote\Model\Plugin;

 class Quote
{
/**
* @param \Magento\Quote\Model\Quote $subject
* @param \Closure $proceed
* @param bool $multishipping
* @return bool|mixed
*/
public function aroundValidateMinimumAmount(
\Magento\Quote\Model\Quote $subject, /* 实例化要重写的目标类 */
\Closure $proceed, /* 用around方法时要用的钩子,很重要 */
$multishipping = false /* 目标方法的参数 */
)
{
$quote = $subject;
$items = $quote->getItemsCollection();
foreach($items as $item){
/* dosomething */ }
return $proceed($multishipping); /* 执行完插件的代码后,返回,继续执行目标类的部分 */
} } after和before方法的创建跟上面around方法类似,所不同的是 \Closure $proceed 钩子不用添加。 写这篇随笔是为了给自己记个笔记,刚学magento一个月,对很多知识理解还不深,如有错漏,欢迎网友批评指正!

Magento 2.1.X 插件(Plugin)的创建的更多相关文章

  1. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(三)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2340661.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

  2. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(四)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/08/2343294.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

  3. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(一)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/02/2336147.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

  4. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(二)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2339490.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

  5. 互联网轻量级框架SSM-查缺补漏第八天(MyBatis插件plugin使用及原理)

    简言:今天进行第八天的记录(只是写了八天).有的时候看的多,有的时候看的少,看的少的时候就攒几天一起写了.而今天这个插件我昨天写了一下午,下班没写完就回去了,今天把尾收了,再加上一个过程图方便下面原理 ...

  6. Qt Creator 中的插件Plugin, 区分说明。。。

    Qt Creator 中可以创建 三中类型的插件Plugin: 1.用的最多的,派生自QGenericPlugin类: 在新建Library,   Plugin类型工程中,新建. 调用使用QPlugi ...

  7. 好用的Magento一步支付插件One Step Checkout免费版

    Magento免费版一步支付插件地址:http://www.magentocommerce.com/magento-connect/one-page-checkout.html‎ 直接引用KEY:ht ...

  8. Maven自定义绑定插件目标:创建项目的源码jar

    <build> <plugins> <!-- 自定义绑定,创建项目的源码jar --> <plugin> <groupId>org.apac ...

  9. 在cmd命令行使用Maven Archetype插件 generate命令创建简单的java web项目

    前提: 1.下载apache-maven:https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache ...

随机推荐

  1. DesignPatternPrinciple(设计模式原则)一

    设计模式六大原则(1):单一职责原则 定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责.  问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需 ...

  2. 【Ubuntu16]】ufw

    Usage: ufw COMMAND Commands: enable enables the firewall 开启ufw防火墙 disable disables the firewall 禁用防火 ...

  3. Mybatis 插入数据并返回刚刚插入的数据id

    1.在Mybatis Mapper文件中添加属性“useGeneratedKeys”和“keyProperty”,其中keyProperty是Java对象的属性名,而不是表格的字段名. 2.Mybat ...

  4. geotrellis使用(三十一)使用geotrellis直接将GeoTiff发布为TMS服务

    前言 传统上我们需要先将Tiff中存储的影像等数据先切割成瓦片,而后再对外提供服务.这样的好处是服务器响应快,典型的用空间来换时间的操作.然而这样造成的问题是空间的巨大浪费,一般情况下均需要存储1-1 ...

  5. MemCache在Windows环境下的搭建及启动

    MemCache在Windows环境下的搭建及启动 一.memcache服务器端的安装 1.下载memcached的安装包,memcached_en32or64.zip,下载链接:http://pan ...

  6. Shuffle 的 5步

    Shuffle的本意是洗牌.混乱的意思,类似于java中的Collections.shuffle(List)方法,它会随机地打乱参数list里的元素顺序.MapReduce中的Shuffle过程.所谓 ...

  7. Spring中@Value标签的使用详解

    1.@Value标签 由于Spring对通过IOC的方式对对象进行统一管理,所以对任何对象而言,其生成方法均由Spring管理.传统的方法是通过XML配置每一个Bean,并对这个Bean的所有Fiel ...

  8. java设计模式系列之设计模式概要(1)

    一.什么是设计模式 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. ...

  9. 【转】Java虚拟机的JVM垃圾回收机制

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp43       1.JVM内存空间     JVM堆(Heap)= 新生代 ...

  10. Unity相对于Cocos2d-x的比较

    1.unity:Code in C# or js       cocos:(Code in C++) 2.unity:可以让美工.动画.码农在同一个平台上各司其职(一起玩)       cocos:码 ...