Magento 2创建事件 – Magento 2中的观察者

在这个例子中,我们将为您如何在Magento 2中创建一个事件,我们只捕获事件以Mageplaza - Event在前端显示该单词,因此我们应该events.xmletc/frontend文件夹中创建一个文件。

在Magento 2中创建事件的概述

  • 第1步:派遣事件
  • 第2步:创建一个事件文件:events.xml
  • 第3步:创建Observer类
  • 第4步:刷新缓存并检查结果

了解捕捉和处理事件

Magento使用区域定义来管理商店。我们将有一个前端区域和管理区域。使用配置文件,它们可以放在3个位置:

  • etc/文件夹下是可以在管理员和前端使用的配置。
  • etc/frontend文件夹将用于前端区域。
  • etc/adminhtml文件夹将用于管理区。

与事件配置文件相同。您可以为每个区域创建事件配置文件,如下所示:

  • 管理区域: app/code/Mageplaza/HelloWorld/etc/adminhtml/events.xml
  • 前端区域: app/code/Mageplaza/HelloWorld/etc/frontend/events.xml
  • 全球领域: app/code/Mageplaza/HelloWorld/etc/events.xml

第1步:派遣事件

现在我们要调度一个magento 2事件列表,允许其他模块更改显示的单词。我们将改变这样的控制器:

文件: app/code/Mageplaza/HelloWorld/Controller/Index/Test.php

内容将是:

<?php

namespace Mageplaza\HelloWorld\Controller\Index;

class Test extends \Magento\Framework\App\Action\Action
{

	public function execute()
	{
		$textDisplay = new \Magento\Framework\DataObject(array('text' => 'Mageplaza'));
		$this->_eventManager->dispatch('mageplaza_helloworld_display_text', ['mp_text' => $textDisplay]);
		echo $textDisplay->getText();
		exit;
	}
}

dispatch方法将接收2个参数:唯一的事件名称和数组数据。在此示例中,我们将数据对象添加到事件中并将其调回以显示文本。

第2步:创建一个事件文件:events.xml

文件: app/code/Mageplaza/HelloWorld/etc/frontend/events.xml

<?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="mageplaza_helloworld_display_text">
        <observer name="mp_display_text" instance="Mageplaza\HelloWorld\Observer\ChangeDisplayText" />
    </event>
</config>

在这个文件中,在config元素下,我们定义一个事件元素,其名称是上面调度的事件名称。将通过instance属性在observer元素中定义将执行此事件的类。观察者的名字用于与此事件的其他观察者一起识别。

使用此events.xml文件,Mageplaza\HelloWorld\Observer\ChangeDisplayText只要在前端区域调用此事件的调度方法,Magento就会执行类。请注意,我们放在events.xml前端区域,因此如果您在管理区域(如管理员控制台)发送该事件,它将无法运行。

第3步:创建Observer类

现在我们将创建一个类来执行上面的事件。

文件: app/code/Mageplaza/HelloWorld/Observer/ChangeDisplayText.php

<?php

namespace Mageplaza\HelloWorld\Observer;

class ChangeDisplayText implements \Magento\Framework\Event\ObserverInterface
{
	public function execute(\Magento\Framework\Event\Observer $observer)
	{
		$displayText = $observer->getData('mp_text');
		echo $displayText->getText() . " - Event </br>";
		$displayText->setText('Execute event successfully.');

		return $this;
	}
}

该类将实现ObserverInterface并声明execute方法。你可以看到这个简单的方法来了解它是如何工作的。

第4步:刷新缓存并检查结果

让我们刷新缓存并查看结果。

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论