文章彙整

Magento 2 事件處理 (中) — 自定義事件

By Steffi 7 months agoNo Comments
首頁  /  Magento  /  Magento-2  /  Magento 2 事件處理 (中) — 自定義事件

Magento 內建有許多的事件 ( Event ),其實使用起來非常方便,上次我們介紹了如何使用官方的事件以及如何使用參數,今天就我們來看看自定義事件的用法吧!

1.在 Controller 內產生事件 ( Event )

這次示範,以我們常用的 Controller 為例,依照底下程式碼新增一個 Controller

其中,我們可以看到在 41 行的部分,我們呼叫了一個自定義的事件,並且命名為 sample_controller_before_execute。目前到這裡為止,已經完成 99% 了。我們可以知道,只要有正確的繼承到 Magento 原生的 Action Class 皆可以直接使用 _eventManager 來管理事件。

<?php


namespace Grayson\Post\Controller\Index;


use Magento\Framework\App\Action\Context;

use Magento\Framework\View\Result\PageFactory;

use Magento\Framework\App\Action\Action;


/**

* Class Index

* @package Grayson\Post\Controller\Index\Index

*/

class Index extends Action

{



   /**

    * Index resultPageFactory

    * @var PageFactory

    */

   protected $resultPageFactory;


   /**

    * Index constructor.

    * @param Context $context

    * @param PageFactory $resultPageFactory

    */

   public function __construct(Context $context, PageFactory $resultPageFactory)

   {

       $this->resultPageFactory = $resultPageFactory;

       return parent::__construct($context);

   }


   /**

    * Function execute

    * @return \Magento\Framework\View\Result\Page

    */

   public function execute()

   {


       $this->_eventManager->dispatch(

           'sample_controller_before_execute',

           [

               'controller' => $this

           ]);


       return $this->resultPageFactory->create();

   }

}

2.定義xml
在 Controller 內使用事件之後,其他的模組如果也想要使用的的話,就需要使用 xml 來註冊事件,其實就是跟上一篇幅的 xml 類似,但是 Event Name 的部分,需要更改成我們自己定義的 Event Neme,這樣即可完成。

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">

   <event name="controller_action_catalog_product_save_entity_after">

    <observer name="sample_controller_before_execute" instance="Vendor\Extension\Observer\SampleControllerBeforeExecute" />

   </event>

</config>

其中裡面參數參數的部分,這裡再整理一次:

  • name – 每一個事件必須要有獨立且唯一的命名
  • instance – 必須指定一個 Class 的 namespace,並且繼承 magento 的 interface
  • disabled – 開啟或關閉此事件
  • shared – 此 instance 是否要與其他事件共用,預設為 false

下次我們會再介紹支撐Magento 2 背後的系統EAV,更多教學,請看Magento 2 教學導覽,別忘追蹤我們的Facebook粉絲專頁,以及訂閱歐斯瑞電子報,每日幫你更新電商知識!

更多Magento相關文章請看: Magento教學導覽

以上內容由Astralweb 歐斯瑞編寫製作

 000

推薦文章

Category:
  Magento-2

留下回應

你的電子郵件地址不會被公開.

取得獨家電子商務祕技

建立更好的策略靈感

跟上全球的網路趨勢

絕佳的電商解決方案

電子商務戰略全指南

每月發送電商戰略指南,只要填寫E-mail即可訂閱!

請到您的信箱確認,即可完成訂閱。