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);
}
}
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}')
);
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
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