Я разрабатываю 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
Вы распространяете 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 вы найдете разные ошибки, которые бросаются или могут быть выброшены.