1. etc/di.xml 定义如下:

      <type name="Magento\Quote\Model\Quote\Item\ToOrderItem">
    <plugin name="McSize_to_order_item" type="Mc\Size\Model\Plugin\Quote\McSizeToOrderItem" sortOrder="1" disabled="false"/>
    </type>
    • type name:输入需要遵循的类或接口的名称。
    • plugin name:标识插件的任意插件名称。还用于合并插件的配置。
    • plugin type:填写插件类或其虚拟类型的名称。您可以为此字段引用以下命名约定:\Vendor\Module\Plugin\<ModelName>Plugin

      

  2. 插件中的3种方法:
    • before - before【 Dispatch Class Method Name 】() 在方法以前执行的方法;
    • around - around【 Dispatch Class Method Name 】() 在方法运行时;
    • after - after【 Dispatch Class Method Name 】()   在方法运行后执行方法;
  3. 如下实例,将自定义购物车字段 quote_item 表数据,保存到 sales_order_item 的自定义字段; 
    <?php
    /**
    * Created by .
    * User: jerryxu
    * Date: 2019/5/5
    * Time: 3:48 PM
    */ namespace Mc\Size\Model\Plugin\Quote; use Mc\Size\Traits\Common; /**
    * Fixme Plugin Quote_Item_Custom_Field To Sales_Order_Item_Custom_Field
    * Class McSizeToOrderItem
    * @package Mc\Size\Model\Plugin\Quote
    */
    class McSizeToOrderItem
    { /**
    *
    */
    use Common; /** Fixme texting Debug
    * @var int
    * @return 0/1
    */
    private $log = 1; /**Fixme Overrde Method
    * @param \Magento\Quote\Model\Quote\Item\ToOrderItem $subject
    * @param \Closure $proceed
    * @param \Magento\Quote\Model\Quote\Item\AbstractItem $item
    * @param array $additional
    * @return Item
    */
    public function aroundConvert(
    \Magento\Quote\Model\Quote\Item\ToOrderItem $subject,
    \Closure $proceed,
    \Magento\Quote\Model\Quote\Item\AbstractItem $item,
    $additional = []
    ) {
    /** @var $orderItem Item */
    $orderItem = $proceed($item, $additional);
    $orderItem->setSizeId($item->getSizeId());//Fixme Quote Item Custom Size_id To Sales Order Item Custom Size_id
    $orderItem->setSizeType($item->setSizeType());//Fixme Quote Item Custom Size_type To Sales Order Item Custom Size_type
    return $orderItem;
    } /** Fixme texting Debug
    * @param \Magento\Quote\Model\Quote\Item\ToOrderItem $subject
    * @param $data
    * @return array
    */
    public function beforeConvert(\Magento\Quote\Model\Quote\Item\ToOrderItem $subject, $data)
    {
    /**
    * @var \Mc\Size\Helper\Data $helper
    */
    if($this->log){
    $helper = $this->mc_get_obj('Mc\Size\Helper\Data');
    $helper->logger(__(__METHOD__));
    } }
    }

参考1 参考2

Magento2 观察者模式 之 插件的更多相关文章

  1. (3)MEF插件系统中通信机制的设计和实现

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 一般的WinForm中通过C#自带的Event机制便能很好的实 ...

  2. (1)从底层设计,探讨插件式GIS框架的实现

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 研一时,听当时的师兄推荐,买了蒋波涛的一本关于GIS插件框架的书.当时 ...

  3. MEF插件系统中通信机制的设计和实现

    MEF插件系统中通信机制的设计和实现 1.背景 一般的WinForm中通过C#自带的Event机制便能很好的实现事件的注册和分发,但是,在插件系统中却不能这么简单的直接用已有的类来完成.一个插件本不包 ...

  4. MySQL插件实现浅析——插件的调用

    一. MySQL中的动态插件 最初想到这个问题是在学习mysql半同步复制相关问题的时候,为何在mysql运行时install半同步插件并开启后就能起到作用,他是如何让事务停下来等待的.安装插件的时候 ...

  5. 原生JS插件(超详细)

    作为一个前端er,如果不会写一个小插件,都不好意思说自己是混前端界的.写还不能依赖jquery之类的工具库,否则装得不够高端.那么,如何才能装起来让自己看起来逼格更高呢?当然是利用js纯原生的写法啦. ...

  6. Magento2.X 前端&综合 简要

    主题是Magento的应用程序,它提供了整个应用的前端部分: 主题旨在覆盖或自定义视图层资源,通过模块和库最初提供.主题由不同的供应商(前端开发人员)实施,并拟分配为类似于其他组件的Magento系统 ...

  7. RPC的基础:调研EOS插件http_plugin

    区块链的应用是基于http服务,这种能力在EOS中是依靠http_plugin插件赋予的. 关键字:通讯模式,add_api,http server,https server,unix server, ...

  8. Magento2与Magento1的区别有哪些

    magento2是15年正式上线的正式版,框架和写法跟magento1有很大区别,用到了命名空间和composer,模块化设计更强.因为是刚出生不久 所以bug比较多.目前全世界做magento2的公 ...

  9. 理解javascript观察者模式(订阅者与发布者)

    什么是观察者模式? 观察者模式又叫做发布订阅模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生改变时就会通知所有观察着对象.它是由两类对象组成,主题和观察者 ...

随机推荐

  1. tmobst6

    1.(单选题)Oracle数据库中,在SQL语句中连接字符串的方法是:(). A)CAT B)CONCAT C)JOIN D)UNION 2.(单选题)在数据库中,有一个名为seq的序列对象,以下语句 ...

  2. session学习总结【session原理、应用、与cookie区别】

    session原理 session也是一种记录浏览器状态的机制,但与cookie不同的是,session是保存在服务器中. 由于http是无状态协议,当服务器存储了多个用户的session数据时,如何 ...

  3. 你都这么拼了,面试官TM怎么还是无动于衷

    面试,对于每个人而然并不陌生,可以说是必须经历的一个过程了,小到一场考试,大到企业面试,甚至大型选秀...... 有时自己明明很努力了,但偏偏会在面试环节出了插曲,比如,紧张就是最容易出现的了. 我相 ...

  4. pip install 提示:OSError: [Errno 13] 权限不够:

    使用pip install 安装时报错: OSError: [Errno 13] 权限不够: 解决方法:1.加sudo. 2.pip install packagename --user,只为当前用户 ...

  5. c++ 中变量成员的初始化时机

    代码如下: 注意一下我打断点的位置. 最后的结果: 在程序进入MyTest()的函数体之前,控制台就打印出来了I have been constructed. 即:在进入构造函数的函数体之前,类中的成 ...

  6. 编写 Django 应用单元测试

    作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 我们博客功能越来越来完善了,但这也带来了一个问题,我们不敢轻易地修改已有功能的代码了 ...

  7. Linux中Hadoop的安装与配置

    一.准备 1,配通网络 ping www.baidu.com 之前安装虚拟机时配过 2,关闭防火墙 systemctl stop firewalld systemctl disable firewal ...

  8. Time-Frequency Networks For Audio Super-Resolution

    论文题目:2018_用于音频超分辨率的时频网络 博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/12345950.html 摘要 音频超分辨率(即带 ...

  9. Java也疯狂-分享利用ffmpeg做视频转换的工具

    朋友需要经常将视频统一转换为mp4格式,市面上的工具很多,但是转换的体积.自动化程度等都不好,于是花了一个小时给朋友写了个给予ffmpeg的批量转换工具,功能简单但是很实用,也正好给学习Java的同学 ...

  10. VueJs一步步实现带感的帮助面板

    环境 IDE: WebStorm 2019.1.4 系统: Mac OS X 10.15.4 VueJs: 2.6.11 Vue-cli: 4.2.2 前言   最近一直在忙毕设,前端终于还是对我这个 ...