Magento 2 Events

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!

 

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *