Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 05 июл 2025, 15:40

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Организовать ошибку 404 на kohane
СообщениеДобавлено: 27 авг 2012, 01:56 
Не в сети
Бывалый

Зарегистрирован: 11 июл 2012, 22:36
Сообщения: 41
Как грамотно организовать обработку ошибок, в частности (несуществующие страницы) на kohane?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Организовать ошибку 404 на kohane
СообщениеДобавлено: 27 авг 2012, 05:23 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
В Kohana исключения обрабатывает системный класс Kohana_Kohana_Exсeption, который отображает страницу ошибки, используя представление system/views/kohana/error.php

Создайте класс, унаследовав его от системного,поместив его в application/classes/kohana/exception.php
Код:
class Kohana_Exception extends Kohana_Kohana_Exception {

    public static function handler(Exception $e)
    {
        // Стандартная обработка, если проект на стадии разработки
        if (Kohana::DEVELOPMENT === Kohana::$environment)
        {
            parent::handler($e);
        }
        else
        {
            try
            {
                // Пишем в лог
                Kohana::$log->add(Log::ERROR, parent::text($e));

                $attributes = array
                (
                    'action'  => 500, // Ошибка по умолчанию
                    'message' => rawurlencode($e->getMessage())
                );

                // Получаем код ошибки, как название экшена
                if ($e instanceof HTTP_Exception)
                {
                    $attributes['action'] = $e->getCode();
                }

                // Выполняем запрос, обращаясь к роутеру для обработки ошибок
                echo Request::factory(Route::get('error')->uri($attributes))
                    ->execute()
                    ->send_headers()
                    ->body();
            }
            catch (Exception $e)
            {
                // Чистим буфер и выводим текст ошибки
                ob_get_level() and ob_clean();
                echo parent::text($e);
                exit(1);
            }
        }
    }
}


bootstrap.php
Код:
  Route::set('error', 'error/<action>(/<message>)', array('action' => '[0-9]++', 'message' => '.+'))
    ->defaults(array(
      'controller'  => 'error'
    ));


/application/classes/controller/error.php
Код:
class Controller_Error extends Controller {

  public function before()
  {
    parent::before();
    // Internal request only!
    if (Request::$initial !== Request::$current)
    {
      if ($message = rawurldecode($this->request->param('message')))
      {
        $this->template->message = $message;
      }
    }
    else
    {
      $this->request->action(404);
    }
    $this->response->status((int) $this->request->action());
  }

  public function action_404()
  {
    $this->template->title = 'Not Found 404';
    $this->template->content = View::factory('error/404' );
  }

  public function action_500()
  {
    $this->template->title = 'Internal Server Error';
    $this->template->content = View::factory('error/500' );
  }

  public function action_503()
  {
    $this->template->title = 'Maintenance Mode';
    $this->template->content = View::factory('error/503' );
  }

}


Соответственно должны быть представления:
    views/error/404
    views/error/500
    views/error/503


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Организовать ошибку 404 на kohane
СообщениеДобавлено: 27 авг 2012, 06:22 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Friendly Error Pages


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group