Criar uma Exception personalizada no Magento 2

Lucas Teixeira dos Santos Santana - Dec 13 '21 - - Dev Community

Contextualizando

O que é uma Exception?

É um mecanismo que sinaliza um evento excepcional, significa algo que não é comum. A exceção ocorre quando acontece algo fora da regra de negócio prevista.
O tratamento de exceção é o mecanismo responsável pelo tratamento da ocorrência de condições que alteram o fluxo normal da execução de programas de computadores.
Exceção são usadas para fazer tratamentos no código, ou seja, podemos fazer um controle de exceção em determinada parte de um código fonte para saber qual foi o erro que levou ao problema.
Uma exceção pode ser lançada através da palavra reservada throw quando o trecho de código estiver envolvido na palavra reservada try, e capturada através da palavra reservada catch. Cada bloco try precisa ter ao menos um catch ou finally correspondente.
Uma classe de exceção definida pelo usuário pode ser criada herdando a classe \Exception, consequentemente, o objeto lançado precisa ser uma instância da classe \Exception ou uma subclasse de \Exception. Tentar lançar um objeto sem essa ascendência resultará em um erro fatal. Para saber mais, consulte a documentação oficial do PHP sobre as exceptions.


Código para criar uma Exception

Este tipo de arquivo deve seguir a estruturas de pastas \{Vendor}\{Module}\Exception\{Name}Exception.php. Cada arquivo de Exception deve estender a classe \Magento\Framework\Exception\LocalizedException.

<?php

namespace {Vendor}\{Module}\Exception;

use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Phrase;

class {Name}Exception extends LocalizedException
{
    public function __construct(
        Phrase $phrase = null,
        \Exception $cause = null,
        array $params = [],
        $code = 0
    ) {
        parent::__construct($phrase, $cause, $params, $code);
    }
}
Enter fullscreen mode Exit fullscreen mode

A classe \Magento\Framework\Exception\LocalizedException estende da classe \Exception do PHP e é estendida por um conjunto de classes que o próprio Magento já disponibiliza para o uso, estas classes de exceção estão disponíveis no caminho \Magento\Framework\Exception.

Disparando uma exceção

Ao disparar uma exceção, o código será interrompido e será "capturado" pelo primeiro catch que envolverá o código (podendo ser de outra função ou método. Para disparar uma exceção personalizada no Magento, é igual a lançar qualquer outra exceção.

throw new \{Vendor}\{Module}\Exception\{Name}Exception(
    __('{Message exception}')
);
Enter fullscreen mode Exit fullscreen mode

Finalização

Valores entre chaves ({test}) devem ser alterados na implementação do código.

Habilitando as alterações

Execute o comando PHP para limpar todos os caches de armazenamento em cache do processos.

php bin/magento cache:clean
php bin/magento flush
Enter fullscreen mode Exit fullscreen mode

Diretórios e Arquivos

Segue a a lista de diretórios e arquivos que devem ser criados.

- app/
  - code/
    - {Vendor}/
      - {Module}/
        - etc/
          - module.xml
        - Exception/
          - {Name}Exception.php
        - registration.php
        - composer.json
Enter fullscreen mode Exit fullscreen mode
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .