Magento 2 创建事件 - Magento 2 中的观察者
在此示例中,我们将向您展示如何在 Magento 2 中创建事件Example
- Event
,我们仅捕获该事件以在前端显示,因此我们应该events.xml
在文件夹中创建一个文件etc/frontend
。
在 Magento 2 中创建事件的概述
- 第 1 步:调度事件
- 第 2 步:创建事件文件:events.xml
- 第 3 步:创建观察者类
- 第 4 步:刷新缓存并检查结果
了解捕获和处理事件
Magento 使用区域定义来管理商店。我们将有一个前端区域和管理区域。通过配置文件,它们可以放在3个地方:
- 文件夹下
etc/
是可在管理和前端中使用的配置。 etc/frontend
文件夹将用于前端区域。etc/adminhtml
文件夹将用于管理区域。
与事件配置文件相同。您可以为每个区域创建事件配置文件,如下所示:
- 管理区域:
app/code/
Example
/HelloWorld/etc/adminhtml/events.xml - 前端区域:
app/code/
Example
/HelloWorld/etc/frontend/events.xml - 全局区域:
app/code/
Example
/HelloWorld/etc/events.xml
第 1 步:调度事件
现在我们想要调度一个magento 2 事件列表,它允许其他模块可以更改显示的单词。我们将像这样更改控制器:
文件:app/code/
Example
/HelloWorld/Controller/Index/Test.php
内容将是:
<?php
namespace Example\HelloWorld\Controller\Index;
class Test extends \Magento\Framework\App\Action\Action
{
public function execute()
{
$textDisplay = new \Magento\Framework\DataObject(array('text' => 'Example'));
$this->_eventManager->dispatch('example_helloworld_display_text', ['mp_text' => $textDisplay]);
echo $textDisplay->getText();
exit;
}
}
调度方法将接收 2 个参数:一个唯一的事件名称和一个数组数据。在此示例中,我们将数据对象添加到事件中并回调它以显示文本。
步骤2:创建事件文件:events.xml
文件:app/code/
Example
/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="example_helloworld_display_text">
<observer name="mp_display_text" instance="Example\HelloWorld\Observer\ChangeDisplayText" />
</event>
</config>
在此文件中的 config 元素下,我们定义一个事件元素,其名称是上面调度的事件名称。将执行此事件的类将通过实例属性在观察者元素中定义。观察者的名称用于与该事件的其他观察者进行识别。
使用此文件,只要在前端区域调用此事件的调度方法,events.xml
Magento 就会执行类。
请注意,我们放置Example
\HelloWorld\Observer\ChangeDisplayTextevents.xml
在前端区域,因此如果您在管理区域(如管理控制器)调度该事件,它将不会运行。
第三步:创建观察者类
现在我们将创建一个类来执行上述事件。
文件:app/code/
Example
/HelloWorld/Observer/ChangeDisplayText.php
<?php
namespace Example\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
并声明执行方法。您可以看看这个简单的方法来了解它是如何工作的。
步骤 4:刷新缓存并检查结果
最后刷新缓存并查看结果。