В случае неразрешимой ошибки в вашем приложении, обычно приложение прекращает обработку данных и выводит для пользователя страницу с ошибкой. Для того, чтобы не писать обработку ошибок для каждого контроллера и компонента, вы можете использовать предлагаемый метод:
<? $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
<h2>Не удалось записать файл</h2> <p>Не могу записать файл <?php echo $file ?> на диск.</p>
и добавьте ошибку в ваш контроллер/компонент
<?
$this->cakeError('cannotWriteFile', array('file'=>'somefilename'));
?>
По умолчанию $this->__outputMessage(<view-filename>) просто отобразит отображение views/errors/<view-filename>.ctp. Если вы желаете изменить это поведение, то вы можете переопределить __outputMessage($template) в вашем классе AppError.