CakePHP - Errori e gestione delle eccezioni

Il guasto del sistema deve essere gestito in modo efficace per un funzionamento regolare del sistema. CakePHP viene fornito con il trapping degli errori predefinito, che stampa e registra gli errori non appena si verificano. Questo stesso gestore di errori viene utilizzato per catturareExceptions.

Il gestore degli errori visualizza gli errori, quando il debug è vero e registra l'errore, quando il debug è falso. CakePHP ha un numero di classi di eccezioni e la gestione delle eccezioni incorporata catturerà qualsiasi eccezione non rilevata e renderà una pagina utile.

Configurazione di errori e eccezioni

Errori ed eccezioni possono essere configurati nel file config\app.php. La gestione degli errori accetta alcune opzioni che ti consentono di personalizzare la gestione degli errori per la tua applicazione:

Opzione Tipo di dati Descrizione
errorLevel int

Il livello di errori che ti interessa acquisire. Usa le costanti di errore php integrate e le maschere di bit per selezionare il livello di errore che ti interessa.

traccia bool

Includere tracce dello stack per gli errori nei file di registro. Le tracce dello stack verranno incluse nel registro dopo ogni errore. Questo è utile per trovare dove / quando vengono generati errori.

exceptionRenderer corda

La classe responsabile del rendering delle eccezioni non rilevate. Se scegli un filecustom class, dovresti inserire il file per quella classe in src/Error. Questa classe deve implementare un filerender() metodo.

log bool

Quando è vero, verranno registrate le eccezioni + le loro tracce di stack Cake\Log\Log.

skipLog Vettore

Un array di nomi di classi di eccezioni che non devono essere registrati. Questo è utile per rimuovereNotFoundExceptions o altri messaggi di log comuni ma poco interessanti.

extraFatalErrorMemory int

Impostare il numero di megabyte di cui aumentare il limite di memoria quando si verifica un errore irreversibile. Ciò consente di lasciare spazio per completare la registrazione o la gestione degli errori.

Esempio

Apporta modifiche nel file config/routes.php file come mostrato nel codice seguente.

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

Creare ExpsController.php file in src/Controller/ExpsController.php. Copiare il codice seguente nel file del controller.

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 una directory Exps a src/Template e in quella directory creare un file Viewfile chiamato index.php. Copia il codice seguente in quel file.

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

Esegui l'esempio precedente visitando il seguente URL.

http: // localhost / cakephp4 / eccezione / 5/0

Produzione

Dopo l'esecuzione, riceverai il seguente output.