• Magento2 观察者模式 之 插件


    1. etc/di.xml 定义如下:
        <type name="MagentoQuoteModelQuoteItemToOrderItem">
              <plugin name="McSize_to_order_item" type="McSizeModelPluginQuoteMcSizeToOrderItem" sortOrder="1" disabled="false"/>
          </type>
      
      • type name:输入需要遵循的类或接口的名称。
      • plugin name:标识插件的任意插件名称。还用于合并插件的配置。
      • plugin type:填写插件类或其虚拟类型的名称。您可以为此字段引用以下命名约定:VendorModulePlugin<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 McSizeModelPluginQuote;
      
      
      use McSizeTraitsCommon;
      
      /**
       * Fixme Plugin Quote_Item_Custom_Field To Sales_Order_Item_Custom_Field
       * Class McSizeToOrderItem
       * @package McSizeModelPluginQuote
       */
      class McSizeToOrderItem
      {
      
          /**
           *
           */
          use Common;
      
          /** Fixme texting Debug
           * @var int
           * @return 0/1
           */
          private $log = 1;
      
          /**Fixme Overrde Method
           * @param MagentoQuoteModelQuoteItemToOrderItem $subject
           * @param Closure $proceed
           * @param MagentoQuoteModelQuoteItemAbstractItem $item
           * @param array $additional
           * @return Item
           */
          public function aroundConvert(
              MagentoQuoteModelQuoteItemToOrderItem $subject,
              Closure $proceed,
              MagentoQuoteModelQuoteItemAbstractItem $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 MagentoQuoteModelQuoteItemToOrderItem $subject
           * @param $data
           * @return array
           */
          public function beforeConvert(MagentoQuoteModelQuoteItemToOrderItem $subject, $data)
          {
              /**
               * @var McSizeHelperData $helper
               */
              if($this->log){
                  $helper = $this->mc_get_obj('McSizeHelperData');
                  $helper->logger(__(__METHOD__));
              }
      
          }
      }
      

    参考1  参考2 

  • 相关阅读:
    Docker最全教程之MySQL容器化 (二十四)
    Docker最全教程之使用Node.js搭建团队技术文档站(二十三)
    Docker最全教程之使用PHP搭建个人博客站点(二十二)
    构建自己的简单微服务架构(开源)
    使用Jmeter进行http接口测试
    Appium 服务关键字
    Appium入门示例(Java)
    Appium for win7 环境搭建
    android adb常用指令
    Android测试环境搭建(win7)
  • 原文地址:https://www.cnblogs.com/q1104460935/p/10816261.html
Copyright © 2020-2023  润新知