CakePHP - Gestion des erreurs et des exceptions

La défaillance du système doit être gérée efficacement pour un bon fonctionnement du système. CakePHP est livré avec le trapping d'erreur par défaut, qui imprime et enregistre les erreurs lorsqu'elles se produisent. Ce même gestionnaire d'erreurs est utilisé pour intercepterExceptions.

Le gestionnaire d'erreurs affiche les erreurs, lorsque le débogage est vrai et enregistre l'erreur, lorsque le débogage est faux. CakePHP a un certain nombre de classes d'exceptions et la gestion intégrée des exceptions capturera toute exception non interceptée et rendra une page utile.

Erreurs et configuration des exceptions

Les erreurs et les exceptions peuvent être configurées dans le fichier config\app.php. La gestion des erreurs accepte quelques options qui vous permettent de personnaliser la gestion des erreurs pour votre application -

Option Type de données La description
errorLevel int

Le niveau d'erreurs que vous souhaitez capturer. Utilisez les constantes d'erreur php intégrées et les masques de bits pour sélectionner le niveau d'erreur qui vous intéresse.

trace booléen

Incluez des traces de pile pour les erreurs dans les fichiers journaux. Les traces de pile seront incluses dans le journal après chaque erreur. Ceci est utile pour trouver où / quand les erreurs sont déclenchées.

exceptionRenderer chaîne

La classe responsable du rendu des exceptions non interceptées. Si vous choisissez uncustom classe, vous devez placer le fichier de cette classe dans src/Error. Cette classe doit implémenter unrender() méthode.

Journal booléen

Lorsque true, les exceptions + leurs traces de pile seront consignées dans Cake\Log\Log.

skipLog tableau

Un tableau de noms de classes d'exception qui ne doivent pas être journalisés. Ceci est utile pour supprimerNotFoundExceptions ou d'autres messages de journaux courants, mais sans intérêt.

extraFatalErrorMemory int

Définissez le nombre de mégaoctets pour augmenter la limite de mémoire de, lorsqu'une erreur fatale est rencontrée. Cela laisse une marge de manœuvre pour terminer la journalisation ou la gestion des erreurs.

Exemple

Apportez des modifications au config/routes.php fichier comme indiqué dans le code suivant.

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

Créer ExpsController.php déposer à src/Controller/ExpsController.php. Copiez le code suivant dans le fichier du contrôleur.

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

Créer un annuaire Exps à src/Template et sous ce répertoire, créez un Viewfichier appelé index.php. Copiez le code suivant dans ce fichier.

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

Exécutez l'exemple ci-dessus en visitant l'URL suivante.

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

Production

Lors de l'exécution, vous recevrez la sortie suivante.