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
Вывод
После выполнения вы получите следующий результат.