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.