CakePHP : Manual/CommonTasks/ErrorHandling

Обработка ошибок


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

<? $this->cakeError(<string errorType>, [array parameters]); ?>


Вызов этого метода отобразит пользователю страницу с ошибкой и и прекратит дальнейшую обработку данных в вашем приложении.

parameters должен быть массивом строк. Если массив содержит объекты 
(включая Exception объекты), то они будут приведены в строки.


В CakePHP определены множество типов ошибок, но во время написания, большинство типов ошибок действительно полезны только для фреймворка. Наиболее полезная для разработчика приложений – это старая добрая 404 ошибка. Она может быть вызвана без параметров следующим образом:

<? $this->cakeError('error404'); ?>


Или, другой вариант, вы можете вызвать страницу для отчета об ошибке, передав параметр url:

<? $this->cakeError('error404', array('url' => 'some/other.url')); ?>


Это все становится более полезным, если расширить обработку ошибок для использования ваших собственных типов ошибок. Обработчики ошибок приложения больше всего похожи на действия контроллера; Вы типично будете передавать с помощью set() любой параметр, чтобы он был доступен в отображении и затем рендерить файл отображения и вашего каталога app/views/errors.

Создадим файл app/app_error.php со следующим определением.

<?php
class AppError extends ErrorHandler {
}    
?>


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

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

Добавьте новый метод в ваш класс AppError. Мы будем принимать один параметр file – путь к файлу, который не удалось записать.

<?
function cannotWriteFile($params) {
  
$this->controller->set('file'$params['file']);
  
$this->_outputMessage('cannot_write_file');
}
?>


Создайте отображение в app/views/errors/cannot_write_file.ctp



и добавьте ошибку в ваш контроллер/компонент

<?
   $this
->cakeError('cannotWriteFile', array('file'=>'somefilename')); 
?>


По умолчанию $this->__outputMessage(<view-filename>) просто отобразит отображение views/errors/<view-filename>.ctp. Если вы желаете изменить это поведение, то вы можете переопределить __outputMessage($template) в вашем классе AppError.

<< Чистка данных | Отладка >>