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.

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