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. nodejs 语法学习(持续更新)

    合并objects var o1 = { a: 1 }; var o2 = { b: 2 }; var o3 = { c: 3 }; var obj = Object.assign(o1, o2, o ...

  2. shell 多进程

    shell 多进程来模拟多线程 (1){ } 建立代码块 (2)使用 & 将进程放入后台 [zheng@localhost ~]$ cat threads.sh #!/bin/bash ;i& ...

  3. 7.31.1 java内存的主要划分

    java内存的主要划分:class文件加载到方法区,方法区还存放静态变量和常量,方法区开始执行程序,当调用方法时,会将该方法的栈帧压到栈区,该栈帧中存放局部变量,当方法中new出一个对象,则会在堆中开 ...

  4. 渗透常用手工SQL注入语句合集

    1.判断有无注入点; and 1=1 and 1=2 2.猜表一般的表的名称无非是admin adminuser user pass password 等..and 0<>(select ...

  5. Google研究人员宣布完成全球首例SHA-1哈希碰撞!

    2004年的国际密码讨论年会(CRYPTO)尾声,我国密码学家王小云及其研究同事展示了MD5.SHA-0及其他相关杂凑函数的杂凑碰撞并给出了实例.时隔13年之后,来自Google的研究人员宣布完成第一 ...

  6. PHP访问连接MYSQL数据库

    1.连接数据库       使用mysql_connect()函数建立与MySQL数据库的连接 源码:$con=mysql_connect("主机名或IP","用户名&q ...

  7. [2014-11-11]使用Owin中间件搭建OAuth2.0认证授权服务器

    前言 这里主要总结下本人最近半个月关于搭建OAuth2.0服务器工作的经验.至于为何需要OAuth2.0.为何是Owin.什么是Owin等问题,不再赘述.我假定读者是使用Asp.Net,并需要搭建OA ...

  8. 面试题收集---grep和find的区别

    grep是通过文件找内容 find 是通过内容找文件 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来. 而linux下的find, 在目录结构 ...

  9. MYSQL 中 LIMIT 用法

    mapper文件中的sql: ------------------------------------------------------------------------------------- ...

  10. [转]Java7中的ForkJoin并发框架初探(中)——JDK中实现简要分析

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp85   根据前文描述的Doug Lea的理论基础,在JDK1.7中已经给 ...