Cakephp: как обработать исключение, если действие отсутствует

0

Я разрабатываю Api в CakePHP. Мне нужно обработать исключение, если приложение android вызывает неправильную функцию или неправильный контроллер. Мне нужно знать, как я могу справиться с этим и вернуть ответ в json в приложение для Android. Я имею в виду, я знаю, что могу написать что-то в своей функции beforefilter потому что эта функция будет выполняться первой. Но я не знаю, как я могу поймать сначала исключение или как я могу определить событие. По Googling я прихожу к некоторому решению, но все же он не работает. Вот мой код, ниже которого я попытался.

Приложение /Lib/AppErrorHandler.php

 class AppErrorHandler extends ExceptionRenderer{
  public static function handleException($error) {
        if ($error instanceof MissingActionException) {

          echo "incorrect controller action name";
            exit;
        }
    }
}
?>

в bootstrap.php

App::uses('AppErrorHandler', 'Lib');

Я ничего не делал в своем Api в отношении исключения. Пожалуйста, дайте мне знать, нужно ли мне писать код в классе Api

  • 0
    Вы читали документы здесь: book.cakephp.org/2.0/en/development/exceptions.html ? Я не уверен, что вижу конкретный вопрос иначе. С чем у вас проблемы?
  • 0
    как ваше приложение вызывает API? используется ли нотация .json? если да, то CakePHP выдает ошибки как JSON
Теги:
exception-handling
cakephp-2.0
cakephp-2.3

1 ответ

0

Вы распространяете ExceptionRenderer для своего пользовательского ExceptionHandler, что является правильным способом. Теперь вы пытаетесь переопределить метод handleException, который в основном отсутствует в baseClass. Так что неправильно это делать..

Теперь для вашего решения: вам нужно переопределить функцию render() из класса ExceptionRenderer. Как вы это делаете:

class AppErrorHandler extends ExceptionRenderer{
    public function render() {       
        if ($this->method) {            
            if($this->error instanceof MissingActionException) {
                // echo here whatever you want..
            }
            call_user_func_array(array($this, $this->method), array($this->error));    
            // this line is required to render the normal page as per the error code.. 400 or 500 or similar..
        }
    }
}

PS: в lib/Cake/Error вы найдете файлы, которые обрабатывают исключения по умолчанию. Здесь в exceptions.php вы найдете разные ошибки, которые бросаются или могут быть выброшены.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню