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 

  • 相关阅读:
    一、数据库概念和操作数据库的命令
    [LeetCode] 208. Implement Trie (Prefix Tree) ☆☆☆
    [LeetCode] 329. Longest Increasing Path in a Matrix ☆☆☆
    [LeetCode] 382. Linked List Random Node ☆☆☆
    Java异常之try,catch,finally,throw,throws
    C#畅谈“网络电视”
    JavaWeb项目导入MyEclipse后变为JAVA项目项目【解决方法】
    springmvc学习笔记(理论)
    Struts2之类型转换器
    Oracle笔记
  • 原文地址:https://www.cnblogs.com/q1104460935/p/10816261.html
Copyright © 2011-2022 走看看