In Magento 2, you can create custom events by defining them in your module’s events.xml
file and dispatching them from your code where needed. Here’s how you can do it:
- Define the Event in events.xml:
Create a file named events.xml
in the etc
directory of your module. Define your custom event inside this file.
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="custom_event_name">
<observer name="custom_event_observer" instance="Vendor\Module\Observer\CustomEventObserver" />
event>
config>
Replace custom_event_name
with the name of your custom event and Vendor\Module\Observer\CustomEventObserver
with the class that will observe this event.
- Create the Observer Class:
Create a PHP class for your observer. This class will contain the logic that should be executed when the custom event is dispatched.
namespace Vendor\Module\Observer;
use Magento\Framework\Event\ObserverInterface;
class CustomEventObserver implements ObserverInterface
{
public function execute(\Magento\Framework\Event\Observer $observer)
{
// Your custom logic here
}
}
Replace Vendor\Module\Observer\CustomEventObserver
with the appropriate namespace and class name.
- Dispatch the Event:
You can dispatch the custom event from any part of your code where it’s needed using the EventManager.
namespace Vendor\Module\Model;
use Magento\Framework\Event\ManagerInterface;
class YourClass
{
protected $eventManager;
public function __construct(
ManagerInterface $eventManager
) {
$this->eventManager = $eventManager;
}
public function dispatchCustomEvent()
{
$eventName = 'custom_event_name'; // Name of your custom event
$eventData = ['custom_data' => 'value']; // Optional data to pass to the observer
$this->eventManager->dispatch($eventName, $eventData);
}
}
Replace 'custom_event_name'
with the name of your custom event.
Now, whenever you call dispatchCustomEvent()
method, your custom event will be dispatched, and the logic defined in your observer class will be executed.