系统学习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() 方法将包含您想要在事件触发时执行的所有自定义代码。