zoukankan      html  css  js  c++  java
  • 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 

  • 相关阅读:
    监控代码运行时长 -- StopWatch用法例程
    验证码处理算法(一)
    Linux下安装JDK及相关配置
    JAVA爬虫---验证码识别技术(一)
    JAVA4大线程池
    海量数据去重(上亿数据去重)
    python协程与异步协程
    解决WinSCP连接虚拟机
    生产消费者模式与python+redis实例运用(中级篇)
    生产消费者模式与python+redis实例运用(基础篇)
  • 原文地址:https://www.cnblogs.com/q1104460935/p/10816261.html
Copyright © 2011-2022 走看看