CakePHP - Проблемы с ErrorHandler, не расширяющим AppController - PullRequest
2 голосов
/ 09 августа 2009

Мне было интересно, почему моя страница с ошибкой вызвала определенные страницы моего сайта не визуализировать, но потом я понял, что это потому, что расширяется AppError ErrorHandler вместо AppController. Это вызвало некоторые переменные что я установил в методе beforeFilter AppController, чтобы не отправлять вид. Так как я не могу получить доступ к переменным сеанса из AppError, я думал, что я мог бы сойти с рук с помощью classRegistry создать что-то, что могло бы и просто копировать и вставлять остальная часть моего кода из AppFontroller's beforeFilter ... но это не работает, и при этом это не кажется очень элегантным исправлением У кого-нибудь есть какие-либо подсказки относительно того, что будет лучшим способом подойти к этому? Спасибо, Дэвид.

Ответы [ 2 ]

6 голосов
/ 10 августа 2009

Ваш класс AppError имеет экземпляр контроллера. Вы можете вызвать beforeFilter вручную:

<?php
class AppError extends ErrorHandler {
  function error404() {
    $this->controller->beforeFilter();
    parent::error404();
  }
}
?>
1 голос
/ 21 ноября 2011

В CakePHP 2 вы можете сделать что-то подобное для достижения того же эффекта. В app/Config/bootstrap.php добавьте эту строку:

Configure::write('Exception.renderer', 'AppExceptionRenderer');

Затем создайте файл app/Lib/Error/AppExceptionRenderer.php с этим кодом:

App::uses('ExceptionRenderer', 'Error');

class AppExceptionRenderer extends ExceptionRenderer {
    protected function _outputMessage($template) {
        $this->controller->beforeFilter();
        $this->controller->render($template);
        $this->controller->afterFilter();
        $this->controller->response->send();
    }
}

Более общее описание здесь: http://book.cakephp.org/2.0/en/development/exceptions.html#using-a-custom-renderer-with-exception-renderer-to-handle-application-exceptions

Редактировать: Обновлена ​​ссылка, указывающая на правильное местоположение книги CakePHP 2.0 с 05 июля 2012 г.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...