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