17
Criar uma Exception personalizada no Magento 2
É 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.
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);
}
}
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 excessão estão disponíveis no caminho \Magento\Framework\Exception
.
Ao disparar uma excessã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 excessão personalizada no Magento, é igual a lançar qualquer outra excessão.
throw new \{Vendor}\{Module}\Exception\{Name}Exception(
__('{Message exception}')
);
Valores entre chaves (
{test}
) devem ser alterados na implementação do código.
Execute o comando PHP para limpar todos os caches de armazenamento em cache do processos.
php bin/magento cache:clean
php bin/magento flush
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
17