Evenimentele permit modulelor să reacționeze la acțiuni fără a modifica codul de bază. În Magento 2, declanșezi un eveniment cu dispatch(), apoi îl asculți printr-un observer.
Bună practică: nu folosi
ObjectManager::getInstance()direct — este un anti-pattern. InjecteazăMagentoFrameworkEventManagerInterfaceprin constructor (dependency injection).
1. Declanșarea evenimentului
use Magento\Framework\Event\ManagerInterface;
class MyService
{
private $eventManager;
public function __construct(ManagerInterface $eventManager)
{
$this->eventManager = $eventManager;
}
public function doSomething()
{
$this->eventManager->dispatch('my_custom_event', ['cid' => 123]);
}
}
Primul argument este numele evenimentului, al doilea este tabloul de date transmis observatorilor.
2. Ascultarea evenimentului (observer)
Declară observer-ul în etc/events.xml:
<event name="my_custom_event">
<observer name="my_observer" instance="Vendor\Module\Observer\MyObserver"/>
</event>
Apoi creează clasa Vendor\Module\Observer\MyObserver care implementează Magento\Framework\Event\ObserverInterface și metoda execute(Observer $observer), unde citești datele cu $observer->getData('cid').