Magento 2.1.X 插件(Plugin)的创建
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)的创建的更多相关文章
- MS CRM 2011的自定义和开发(11)——插件(plugin)开发(三)
http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2340661.html MS CRM 2011的自定义和开发(11)——插件(plugin ...
- MS CRM 2011的自定义和开发(11)——插件(plugin)开发(四)
http://www.cnblogs.com/StoneGarden/archive/2012/02/08/2343294.html MS CRM 2011的自定义和开发(11)——插件(plugin ...
- MS CRM 2011的自定义和开发(11)——插件(plugin)开发(一)
http://www.cnblogs.com/StoneGarden/archive/2012/02/02/2336147.html MS CRM 2011的自定义和开发(11)——插件(plugin ...
- MS CRM 2011的自定义和开发(11)——插件(plugin)开发(二)
http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2339490.html MS CRM 2011的自定义和开发(11)——插件(plugin ...
- 互联网轻量级框架SSM-查缺补漏第八天(MyBatis插件plugin使用及原理)
简言:今天进行第八天的记录(只是写了八天).有的时候看的多,有的时候看的少,看的少的时候就攒几天一起写了.而今天这个插件我昨天写了一下午,下班没写完就回去了,今天把尾收了,再加上一个过程图方便下面原理 ...
- Qt Creator 中的插件Plugin, 区分说明。。。
Qt Creator 中可以创建 三中类型的插件Plugin: 1.用的最多的,派生自QGenericPlugin类: 在新建Library, Plugin类型工程中,新建. 调用使用QPlugi ...
- 好用的Magento一步支付插件One Step Checkout免费版
Magento免费版一步支付插件地址:http://www.magentocommerce.com/magento-connect/one-page-checkout.html 直接引用KEY:ht ...
- Maven自定义绑定插件目标:创建项目的源码jar
<build> <plugins> <!-- 自定义绑定,创建项目的源码jar --> <plugin> <groupId>org.apac ...
- 在cmd命令行使用Maven Archetype插件 generate命令创建简单的java web项目
前提: 1.下载apache-maven:https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache ...
随机推荐
- 80C51学习 蜂鸣器
/* 蜂鸣器分为有源和无源 其中有源是指有振荡源 ULN2003 达林顿管 输入输出反向放大 */ #include "reg52.h" typedef unsigned int ...
- Ubuntu 安装和使用 Supervisor(进程管理)
服务器版本 Ubuntu 16.04 LTS. Supervisor 是一个用 Python 写的进程管理工具,可以很方便的对进程进行启动.停止.重启等操作. 安装命令: $ apt-get inst ...
- LaTeX的表格插入与排版
关于LaTex中的图表问题的几篇有用的文章 Graphics and Colour with LaTeX 有关在LaTex中插图和使用颜色的在线指导. Figure'ing and Picture' ...
- MySQL57安装图解
MySQL57安装图解... ============================= 0-需要准备的安装包 =================== 1在百度下载MySQl ============ ...
- Tensorflow开发环境配置及其基本概念
Tensorflow开发环境配置及其基本概念 1.1. 安装Tensorflow开发环境 1.1.1. 安装pycharm 1.1.2. 安装pythe3.6 1.1.3. 安装Tensorflow ...
- MongoDB基本shell操作
---------------------MongoDB基本操作--------------------- 1.MongoDB创建数据库 use 数据库名:切换到指定的数据库中,在插入第一个条 ...
- Centos 6系统修复grub
author:JevonWei 版权声明:原创作品 错误界面如下时,应该是grub的stage数据有缺失,应该从新安装grub GRUB引导的stage1阶段损坏,系统启动会直接进入光盘引导界面,st ...
- three.js 文字显示不出来
试了下使用three.js加载文字,首先是报了一个这样的错误: Cross origin requests are only supported for HTTP.” 当时很懵逼,去网上查了查,发现是 ...
- TensorBoard使用
关于TensorBoard的安装是在安装Tensorflow的过程中就已经默认安装好了,所以安装了Tensorflow就不需要再安装TensorBoard,直接使用就可以了. 具体的使用方法: 命令行 ...
- ★浅谈Spanking情节