当前位置: 技术文章>> magento2中的事件和观察者以及代码示例

文章标题:magento2中的事件和观察者以及代码示例
  • 文章分类: Magento
  • 10790 阅读
系统学习magento二次开发,推荐小册:《Magento中文全栈二次开发 》

本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。


在Magento 2中,事件和观察者是常见的设计模式之一,用于在Magento的核心代码中插入自定义代码。它们使得在不修改核心代码的情况下,您可以在Magento的不同点添加自定义代码。


以下是使用事件和观察者的简单示例:


定义事件

use Magento\Framework\Event;
class MyCustomEvent extends Event
{
    const EVENT_NAME = 'my_custom_event';
    public function __construct(
        $data = []
    ) {
        parent::__construct(self::EVENT_NAME, $data);
    }
}

触发事件

use Magento\Framework\Event\ManagerInterface;
class MyCustomClass
{
    private $eventManager;
    public function __construct(
        ManagerInterface $eventManager
    ) {
        $this->eventManager = $eventManager;
    }
    public function doSomething()
    {
        $eventName = MyCustomEvent::EVENT_NAME;
        $eventData = ['data' => 'my custom data'];
        $this->eventManager->dispatch($eventName, $eventData);
    }
}

定义观察者

use Magento\Framework\Event\ObserverInterface;
class MyCustomObserver implements ObserverInterface
{
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        // Your custom code here
    }
}

注册观察者

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="my_custom_event">
        <observer name="my_custom_observer" instance="MyVendor\MyModule\Observer\MyCustomObserver" />
    </event>
</config>

在上面的示例中,我们定义了一个名为 MyCustomEvent 的事件,并在 MyCustomClass 类中触发该事件。


我们还定义了一个名为 MyCustomObserver 的观察者,并在 events.xml 文件中注册它,以便在事件 my_custom_event 触发时执行它。


请注意,在观察者中实现的 execute() 方法将包含您想要在事件触发时执行的所有自定义代码。


推荐文章