步骤:
- 第1步:派遣事件
- 第2步:创建一个事件文件:events.xml
- 第3步:创建Observer类
- 第4步:刷新缓存并检查结果
派遣事件:
现在我们要调度一个 magento2事件列表,允许其他模块更改显示的单词。app/code/Mageplaza/HelloWorld/Controller/Index/Test.php
在 app/code/Test/Event/Controller/Index目录中创建 Test.php 并添加如下内容:
<?php
namespace Test\Event\Controller\Index;
use Magento\Framework\App\Action\Action;
class Test extends Action
{
public function execute()
{
$textDisplay = new \Magento\Framework\DataObject(['text' => 'Display Text(t1)']);
$this->_eventManager->dispatch('test_event_display_text', ['mp_text' => $textDisplay]);
echo $textDisplay->getText();
exit;
}
}
dispatch 方法将接收 2 个参数:唯一的事件名称和数组数据。
在此示例中,我们将数据对象 $textDisplay 添加到事件中。
创建事件文件:
在 app/code/Test/Event/etc/frontend 目录下创建 events.xml 并添加如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="test_event_display_text">
<observer name="display_text" instance="Test\Event\Observer\ChangeDisplayText" />
</event>
</config>
代码中设置的事件名称即是上一步骤中 dispatch() 函数中传入的 eventName。通过instance属性在observer元素中定义将执行此事件的类。观察者的名称用于与此事件的其他观察者区分识别。
创建 Observer 类:
在 app/code/Test/Event/Observer 目录中创建 ChangeDisplayText.php 并添加如下内容:
<?php
namespace Test\Event\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
class ChangeDisplayText implements ObserverInterface
{
public function execute(Observer $observer)
{
$displayText = $observer->getData('mp_text');
echo $displayText->getText() . '<br/>';
echo 'Begin Change Display Text....<br/>';
$displayText->setText('Display Text(t2)');
return $this;
}
}
该类实现了 ObserverInterface 接口并实现了 execute 方法。
刷新缓存并检查结果:
