Добрый день, %username%!
Данную статью навеяло меня написать, создавая очередной проект, на «новой» Kohana 3.3. Мне необходимо было ловить исключения 404 ошибки и выводить свою страницу. Я решил пойти старым, но работающим путём. Раньше я просто ловил исключения функцией set_exception_handler, и обрабатывал в моём классе. Подробнее под катом. Это можно назвать костылём, которые я не очень сильно люблю, но на тот момент у меня не было другого выбора. В итоге в последней версии исключения просто не желали «ловиться». Я недоумевал, и уже готов был проклять фреймворк, пока полностью не пробежался по официальной документации последней версии. В итоге ребята наконец-то решили эту неудобную проблему, всё стало очень просто. Нам нужно переопределить класс нашего exception'a. И мы более не прибегаем к использованию «костылей». Кто не знает, в kohana структура поиска классов заменяет "_" на слеш, и тем самым организует подпапки. Так что класс HTTP_Exception_404 у нас будет лежать в «application/classes/HTTP/Exception/404.php»
class HTTP_Exception_404 extends Kohana_HTTP_Exception_404 {
/**
* Generate a Response for the 404 Exception.
*
* The user should be shown a nice 404 page.
*
* @return Response
*/
public function get_response()
{
$view = View::factory('errors/404');
// Remembering that `$this` is an instance of HTTP_Exception_404
$view->message = $this->getMessage();
$response = Response::factory()
->status(404)
->body($view->render());
return $response;
}
}
Пример из официальной документации. Как мы видим, в методе get_response реализуется логика обработки исключения. Надеюсь я облегчил жизнь людям, которые блуждают в поиске статьи по организации страницы 404 ошибки в Kohana. Огромное спасибо за внимание!
Автор: unrealphp