CakePHP - Tratamento de Erros e Exceções
A falha do sistema precisa ser tratada de forma eficaz para o bom funcionamento do sistema. O CakePHP vem com trapping de erros padrão, que imprime e registra os erros conforme eles ocorrem. Este mesmo manipulador de erros é usado para capturarExceptions.
O manipulador de erros exibe erros, quando a depuração é verdadeira e registra o erro, quando a depuração é falsa. O CakePHP tem várias classes de exceção e o tratamento de exceção embutido irá capturar qualquer exceção não capturada e renderizar uma página útil.
Erros e configuração de exceções
Erros e exceções podem ser configurados no arquivo config\app.php. O tratamento de erros aceita algumas opções que permitem adaptar o tratamento de erros ao seu aplicativo -
Opção | Tipo de dados | Descrição |
---|---|---|
errorLevel | int | O nível de erros que você está interessado em capturar. Use as constantes de erro php integradas e bitmasks para selecionar o nível de erro no qual está interessado. |
vestígio | bool | Inclui rastreamentos de pilha para erros em arquivos de log. Os rastreamentos de pilha serão incluídos no log após cada erro. Isso é útil para descobrir onde / quando os erros estão sendo gerados. |
exceptionRenderer | corda | A classe responsável por renderizar exceções não capturadas. Se você escolher umcustom classe, você deve colocar o arquivo para essa classe em src/Error. Esta classe precisa implementar umrender() método. |
registro | bool | Quando verdadeiro, as exceções + seus rastreamentos de pilha serão registrados no Cake\Log\Log. |
skipLog | matriz | Uma matriz de nomes de classes de exceção que não devem ser registrados. Isso é útil para removerNotFoundExceptions ou outras mensagens de registro comuns, mas desinteressantes. |
extraFatalErrorMemory | int | Defina como o número de megabytes para aumentar o limite de memória, quando um erro fatal for encontrado. Isso permite espaço para respirar para concluir o registro ou tratamento de erros. |
Exemplo
Faça alterações no config/routes.php arquivo conforme mostrado no código a seguir.
config/routes.php
<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
$builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
'httpOnly' => true,
]));
$builder->applyMiddleware('csrf');
//$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
$builder->connect('/exception/:arg1/:arg2',
['controller'=>'Exps','action'=>'index'],
['pass' => ['arg1', 'arg2']]);
$builder->fallbacks();
});
Crio ExpsController.php arquivo em src/Controller/ExpsController.php. Copie o código a seguir no arquivo do controlador.
src/Controller/ExpsController.php
<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\Core\Exception\Exception;
class ExpsController extends AppController {
public function index($arg1,$arg2) {
try{
$this->set('argument1',$arg1);
$this->set('argument2',$arg2);
if(($arg1 > 1 || $arg1 > 10) || ($arg2 < 1 || $arg2 > 10))
throw new Exception("One of the number is out of range [1-10].");
} catch(\Exception $ex){
echo $ex->getMessage();
}
}
}
?>
Crie um diretório Exps em src/Template e sob esse diretório crie um Viewarquivo chamado index.php. Copie o código a seguir nesse arquivo.
src/Template/Exps/index.php
This is CakePHP tutorial and this is an example of Passed arguments.
Argument-1: <?=$argument1?><br/>
Argument-2: <?=$argument2?><br/>
Execute o exemplo acima visitando o seguinte URL.
http: // localhost / cakephp4 / exception / 5/0
Resultado
Após a execução, você receberá a seguinte saída.