Я прочитал, что класс AppError теперь имеет обратную совместимость и что вместо этого следует использовать Исключения. Как можно создавать пользовательские страницы ошибок для таких вещей, как ошибки 404 или полностью пользовательские ошибки?
CakePHP 2.0 - Как создать пользовательские страницы ошибок?
Ответ 1
Попробуйте следующее:
/app/config/core.php
Необязательный рендеринг необходимо установить как AppExceptionRender
. Пример:
Configure::write('Exception', array(
'handler' => 'ErrorHandler::handleException',
'renderer' => 'AppExceptionRenderer',
'log' => true
));
/app/Controller/ErrorsController.php
class ErrorsController extends AppController {
public $name = 'Errors';
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('error404');
}
public function error404() {
//$this->layout = 'default';
}
}
/app/Lib/Error/AppExceptionRenderer.php
App::uses('ExceptionRenderer', 'Error');
class AppExceptionRenderer extends ExceptionRenderer {
public function notFound($error) {
$this->controller->redirect(array('controller' => 'errors', 'action' => 'error404'));
}
}
/app/View/Errors/error404.ctp
<div class="inner404">
<h2>404 Error - Page Not Found</h2>
</div>
Вставьте его там, где вам нужно: throw new NotFoundException();
Ответ 2
Чтобы настроить содержимое страницы с ошибкой 404 и не нужно настраивать логику, просто отредактируйте содержимое app/View/Errors/error400.ctp
.
Кажется, что это нигде не документировано.
Ответ 3
Если вы используете только другой макет вместо стандартного, просто добавьте $this->layout = 'your_error_layout';
внутри вашего error400.ctp(или любую другую страницу с ошибкой, создаваемую в разделе "Просмотр/ошибки" ).
Ответ 4
Создайте макет с именем 404 или что-нибудь еще и используйте в контроллере приложений
function _setErrorLayout() {
if ($this->name == 'CakeError') {
$this->layout = '404';
}
}
function beforeRender () {
$this->_setErrorLayout();
}
Ответ 5
Принятый ответ не самый лучший вариант, поскольку они перенаправляют URL-адрес вашего браузера на http://example.com.br/error/error404
, и пользователь не может следить за тем, какую страницу он вводил, чтобы сгенерировать эту ошибку.
Лучший способ справиться с этой ситуацией - редактировать файл на View/Errors/error400.ctp
, поэтому, когда вы вводите не найденный URL-адрес, например http:example.com/crazy-wrong-url
, браузер сохранит этот URL-адрес, но отобразит содержимое файла error400.ctp
, который вы редактируете.
Если вы хотите изменить макет, который будет отображаться в представлении, вы можете ввести его в свой вид <?php $this->layout = 'error'; ?>
Ответ 6
Вы можете создать CustomErrorPages
или Exeptions
, просто создав class
вашей ошибки, которую вы собираетесь показать. Этот класс должен расширить CakeExeption
. Затем создайте свой exeptionlogic и ваш набор. Теперь вы можете просто throw new <YourExeptionClass>()
, и он отобразит сообщение об ошибке.
Документация: CakeExceptions
Ответ 7
Было обнаружено, что в ctp файле можно получить код excpetion с помощью $error->getCode()
(по крайней мере, в CakePHP 2.x).
$error
: Cake помещает объект исключения...
Теперь вы можете изменить содержимое своего представления с условным блоком if/else
, основанным на этом значении.