Magento2 观察者模式 之 插件

 

  1. etc/di.xml 定义如下:
    1
    2
    3
    <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 的自定义字段; 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    <?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 

posted @   徐锅  阅读(502)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南

点击右上角即可分享
微信分享提示