Обработка исключений в Kohana 3.3

в 15:32, , рубрики: kohana 3.3, Программирование, метки:

Добрый день, %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

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js