CakePHP - Manejo de errores y excepciones

La falla del sistema debe manejarse de manera efectiva para que funcione sin problemas. CakePHP viene con captura de errores predeterminada, que imprime y registra los errores a medida que ocurren. Este mismo controlador de errores se utiliza para detectarExceptions.

El controlador de errores muestra errores, cuando la depuración es verdadera y registra el error, cuando la depuración es falsa. CakePHP tiene varias clases de excepción y el manejo de excepciones incorporado capturará cualquier excepción no detectada y generará una página útil.

Configuración de errores y excepciones

Los errores y las excepciones se pueden configurar en el archivo config\app.php. El manejo de errores acepta algunas opciones que le permiten personalizar el manejo de errores para su aplicación:

Opción Tipo de datos Descripción
errorLevel En t

El nivel de errores que le interesa capturar. Utilice las constantes de error php integradas y las máscaras de bits para seleccionar el nivel de error que le interesa.

rastro bool

Incluya seguimientos de pila para errores en archivos de registro. Los seguimientos de pila se incluirán en el registro después de cada error. Esto es útil para encontrar dónde y cuándo se generan los errores.

exceptionRenderer cuerda

La clase responsable de procesar excepciones no detectadas. Si eliges uncustom class, debe colocar el archivo para esa clase en src/Error. Esta clase necesita implementar unrender() método.

Iniciar sesión bool

Cuando es verdadero, las excepciones + sus seguimientos de pila se registrarán en Cake\Log\Log.

skipLog formación

Una matriz de nombres de clases de excepción que no se deben registrar. Esto es útil para eliminarNotFoundExceptions u otros mensajes de registros comunes pero poco interesantes.

extraFatalErrorMemory En t

Establezca el número de megabytes para aumentar el límite de memoria cuando se encuentre un error fatal. Esto permite un respiro para completar el registro o el manejo de errores.

Ejemplo

Realice cambios en el config/routes.php archivo como se muestra en el siguiente código.

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

Crear ExpsController.php archivar en src/Controller/ExpsController.php. Copie el siguiente código en el archivo del 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();
         }
      }
   }
?>

Crea un directorio Exps a src/Template y bajo ese directorio crea un Viewarchivo llamado index.php. Copie el siguiente código en ese archivo.

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/>

Ejecute el ejemplo anterior visitando la siguiente URL.

http: // localhost / cakephp4 / exception / 5/0

Salida

Tras la ejecución, recibirá el siguiente resultado.