Magento 2 Events – Parte 2

Dando prosseguimento aos nossos estudos sobre Event Manager, desta vez veremos como criar um evento customizado em Magento 2 Events – Parte 2.

Às vezes, os eventos que já existem no Magento 2 não são suficiente para as nossas regras de negócio. Com isso, podemos precisar de um evento customizado.

Voltando ao nosso módulo, temos a seguinte alteração em nosso Controller:

<?php

namespace ForMage\Learning\Controller\Page;

use Magento\Framework\App\Action\Context;
use Magento\Framework\App\ResponseInterface;
use ForMage\Learning\Api\SizeInterface;
use ForMage\Learning\Api\ColorInterface;
use ForMage\Learning\Model\Product\Shoe;
use ForMage\Learning\Model\Product\Shirt;
use Magento\Framework\Event\ManagerInterface;

class Index extends \Magento\Framework\App\Action\Action
{
    protected $size;
    protected $color;
    protected $product;
    protected $shirt;
    protected $eventManager;

    public function __construct(
        Context $context,
        SizeInterface $size,
        ColorInterface $color,
        Shoe $product,
        Shirt $shirt,
        ManagerInterface $eventManager
    ) {
        parent::__construct($context);
        $this->size = $size;
        $this->color = $color;
        $this->product = $product;
        $this->shirt = $shirt;
        $this->eventManager = $eventManager;
    }

    public function execute()
    {
        $message = new \Magento\Framework\DataObject(array('custom_text' => 'That is my FIRST custom text'));
        echo $message->getCustomText();
    }
}

Acessando a nossa rota temos:

4Mage - Trabalhando com evento customizado no Magento 2

O que nós fizemos acima? Usamos o DataObject do Magento para armazenar um valor na key custom_text e depois imprimimos esse valor.

Magento 2 Events – Parte 2

Ainda em nosso Controller, temos a seguinte modificação no método execute():

public function execute()
{
    $message = new \Magento\Framework\DataObject(array('custom_text' => 'That is my FIRST custom text'));
    $this->eventManager->dispatch('my_custom_event_name', ['custom_text' => $message]);
    echo $message->getCustomText();
}

Note que estamos usando o Event Manager para criar um evento customizado com o nome de my_custom_event_name. Como segundo parâmetro do método dispatch() temos a nossa key custom_text armazenando o objecto $message.

Em nosso events.xml temos a seguinte alteração:

<?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>
    
    <event name="my_custom_event_name">
        <observer name="myCustomEventName" instance="ForMage\Learning\Model\Observer\CustomObserver" />
    </event>
</config>

<event name="my_custom_event_name" assim estamos falando para o Magento 2 que queremos ouvir esse evento quando ele for disparado.

<observer name="myCustomEventName" nome do nosso Observer.

<observer instance="ForMage\Learning\Model\Observer\CustomObserver" /> –> nossa classe Observer.

Então, criamos o nosso CustomObserver:

<?php

namespace ForMage\Learning\Model\Observer;

use Magento\Framework\Event\ObserverInterface;

class CustomObserver implements ObserverInterface
{
    /**
     * @param \Magento\Framework\Event\Observer $observer
     */
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $message = $observer->getData('custom_text');
        $message->setCustomText('That is my SECOND custom text');
    }
}

Entendendo todo o processo

Em nosso Controller, criamos o evento customizado my_custom_event_name. Esse evento será disparado quando o controller for acessado. Em nosso etc/frontend/events.xml, informamos ao Magento 2 qual o evento que queremos “ouvir” e qual será o Observer executado ao “ouvir” o evento disparado. Em nosso CustomObserver interceptamos o objeto $message e efetuamos uma modificação nele.

Ao acessar a nossa rota novamente, temos o seguinte resultado:

4Mage - Criando eventos customizados no Magento 2

 

 

 

Deixe um comentário

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