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. 【Ubuntu 16】源码包安装Apache Httpd

    源码包安装适合初学者使用. 背景信息 APR (Apache Portable Runtime) Apache可移植运行的任务(APR)项目是创建和维护软件库,为底层平台的具体实现提供了一个可预见的和 ...

  2. 【JSP 标签】格式化日期

    在使用JSP开发页面时,java.util.Date在JSP页面直接输出的格式不好看,需要进行格式化. <%@ page language="java" contentTyp ...

  3. VMware Workstation 12 Pro 之安装林耐斯CentOS X64系统

    VMware Workstation 12 Pro 之安装林耐斯CentOS X64系统... -------------- --------------------------- --------- ...

  4. Win7怎么把运行添加到Win快捷菜单的右侧、、、

    win7怎么把运行添加到Win快捷菜单的右侧... ------------------------------ 右键桌面任务栏--选择属性 ----------------------------- ...

  5. Linux学习笔记-林耐斯Notes-Linux就该这么学

    Linux学习笔记... 参考的优秀Linux网站: http://www.w3cschool.cn/linux/ http://www.linuxeye.com/ http://linux.vbir ...

  6. macaca web(4)

    米西米西滴,吃过中午饭来一篇,话说,上回书说道macaca 测试web(3),参数驱动来搞,那么有小伙本又来给雷子来需求, 登录模块能不能给我给重新封装一下吗, 我说干嘛封装,现在不挺好,于是乎,接着 ...

  7. 扩展GridView实现无数据处理

    提出需求 GridView控件在开发后台管理的时候非常方便快速,但是要实现没有数据时显示“没有数据”,并居中,是一件比较麻烦的事情,这里在一个公开的方法里实现了绑定List<T>和Data ...

  8. Windows上安装nvm--nodejs版本管理器

    nvm最新的下载地址 Node版本管理器--nvm,可以运行在多种操作系统上.nvm for windows 是使用go语言编写的软件. 我电脑使用的是Windows操作系统,所以我要记录下在此操作系 ...

  9. java开发网易电话面试 一面总结

    晚上八点多自己在看视频的时候突然接到杭州来的一个电话,当时觉得很奇怪,突兀,接通之后被告知是杭州网易打来的,没有简单的自我介绍,没有多余的废话,直接入主题,吓得我心里怪紧张的,完全没有准备,但是也没有 ...

  10. [转]Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom

     详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp84 Random即:java.util.Random, ThreadL ...