Dando prosseguimento aos estudos de Backend, hoje falaremos de Magento 2 Events.
Trabalhar com Events e Observers é uma das principais maneiras de se estender funcionalidades no Magento 2. Através deles, você pode executar o seu código customizado em resposta ao um evento específico ou até mesmo a um evento personalizado. Nós especificamos o evento que queremos acompanhar e criamos um Observer para ouvir esse evento e executar o código que precisamos.
Magento 2 Events
Voltando ao nosso módulo, vamos criar o nosso arquivo events.xml em etc/frontend, conforme abaixo:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="customer_login"> <observer name="myObserverName" instance="ForMage\Learning\Model\Observer\Observer" /> </event> </config>
Em <event name=”” nós especificamos o evento que queremos ouvir. No nosso caso, ouviremos o evento customer_login. Esse evento é disparado todo vez que ocorre login do cliente na loja. Em <observer name=”” informamos o nome do nosso observer. Aqui, você pode escolher o nome que achar melhor. Em <observer instance=”” é a classe do nosso Observer, onde terá o código que será executado toda vez que o evento, neste caso, customer_login for acionado.
Então, criamos o nosso Observer
<?php namespace ForMage\Learning\Model\Observer; use Magento\Framework\Event\ObserverInterface; use Psr\Log\LoggerInterface; class Observer implements ObserverInterface { private $logger; public function __construct(LoggerInterface $logger) { $this->logger = $logger; } /** * @param \Magento\Framework\Event\Observer $observer */ public function execute(\Magento\Framework\Event\Observer $observer) { $this->logger->info("O evento customer_login foi disparado"); } }
Adicionamos o loggerInterface em nosso __construct() e executamos o método $this->logger->info("O evento customer_login foi disparado");
Ao efetuarmos o login na loja, temos o seguinte resultado em nosso system.log
[2021-06-08 03:37:29] main.INFO: O evento customer_login foi disparado [] []
Events
Ao fazer uso de Events, é importante especificar a área em que os eventos serão observados. No nosso caso, observamos um evento ocorrido no frontend da loja virtual, logo, temos que adicionar o nosso events.xml em etc/frontend. Para não ser executado quando ocorrer um login no admin da loja também. Se estamos observando um evento de admin, então devemos adicionar um events.xml em etc/adminhtml
Observers
Importante ter o seu Observer o mais enxuto possível. Evita cálculos complexos, muita lógica dentro dele, por que isso pode onerar bastante a sua loja virtual. Imagine uma lógica complexa dentro dele e você está observando o evento de adicionar produto ao carrinho? Isso seria muito prejudicial para a sua loja virtual.
Bom, é isso. Espero ter contribuído com o seu desenvolvimento como desenvolvedor Magento 2.
Listagem com vários eventos no Magento 2
Dúvidas? Posta aí!
Um abraço!