CakePHP - Ошибки и обработка исключений

Отказ системы необходимо эффективно обрабатывать для бесперебойной работы системы. CakePHP поставляется с перехватом ошибок по умолчанию, который печатает и записывает ошибки по мере их возникновения. Этот же обработчик ошибок используется для перехватаExceptions.

Обработчик ошибок отображает ошибки, если отладка истинна, и регистрирует ошибку, когда отладка ложна. В CakePHP есть несколько классов исключений, а встроенная обработка исключений фиксирует любое неперехваченное исключение и отображает полезную страницу.

Конфигурация ошибок и исключений

Ошибки и исключения можно настроить в файле config\app.php. Обработка ошибок принимает несколько опций, которые позволяют вам адаптировать обработку ошибок для вашего приложения:

Вариант Тип данных Описание
errorLevel int

Уровень ошибок, которые вы хотите зафиксировать. Используйте встроенные константы ошибок PHP и битовые маски, чтобы выбрать интересующий вас уровень ошибки.

след bool

Включите трассировку стека для ошибок в файлы журнала. Трассы стека будут включаться в журнал после каждой ошибки. Это полезно для определения того, где и когда возникают ошибки.

exceptionRenderer строка

Класс, отвечающий за отображение неперехваченных исключений. Если вы выберетеcustom class, вы должны поместить файл этого класса в src/Error. Этот класс должен реализоватьrender() метод.

журнал bool

Когда истина, исключения + их трассировки стека будут регистрироваться в Cake\Log\Log.

skipLog массив

Массив имен классов исключений, которые не следует регистрировать. Это полезно для удаленияNotFoundExceptions или другие распространенные, но неинтересные сообщения журналов.

extraFatalErrorMemory int

Установите количество мегабайт, на которое необходимо увеличить лимит памяти при обнаружении фатальной ошибки. Это дает передышку для завершения регистрации или обработки ошибок.

пример

Внесите изменения в config/routes.php файл, как показано в следующем коде.

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

Создайте ExpsController.php файл в src/Controller/ExpsController.php. Скопируйте следующий код в файл контроллера.

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

Создать каталог Exps в src/Template и в этом каталоге создайте Viewфайл с именем index.php. Скопируйте следующий код в этот файл.

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

Выполните приведенный выше пример, посетив следующий URL-адрес.

http: // локальный / cakephp4 / исключение / 5/0

Вывод

После выполнения вы получите следующий результат.