Русскоязычный форум, посвященный фреймворку Kohana http://forum.kohanaframework.su/ |
|
Production окружение http://forum.kohanaframework.su/viewtopic.php?f=32&t=43 |
Страница 1 из 1 |
Автор: | vomchik [ 20 фев 2012, 00:21 ] |
Заголовок сообщения: | Production окружение |
Как на готовом проекте отключить обработчик ошибок, что бы если возникла ошибка в коде, то Kohana его не показывала? |
Автор: | admin [ 20 фев 2012, 23:44 ] |
Заголовок сообщения: | Re: Production окружение |
Это статья для тех, использует Kohana Framework. Заметил в последнее время много вопросов по поводу того, как сделать свою собственную страницы 404 на Kohana Framework, да и вообще, как правильно работать с исключениями и обрабатывать сообщения об ошибках. Что сделает Kohana, если пользователь, к примеру, запросит страницу, которая не существует? По умолчанию выведет сообщение об ошибке, так как сработает исключение. Да и не просто выведет сообщение, но и покажет часть кода, где у вас произошла ошибка. Это конечно хорошо, но только на этапе разработки. Вряд ли захочется показывать такое пользователю. Надеюсь все согласны? ![]() Конечно, можно просто делать редирект, если какой-то страницы уже не существует, но согласитесь, это не лучшее решение. Есть еще пару кривых способов, но самое правильное решение – перехватывать исключения и обрабатывать их, при этом в зависимости от возвращаемого кода ошибки (404 File Not Found, 403 Forbidden и т.п. ) иметь возможность выводить свое представление (View). По умолчанию в Kohana есть класс Kohana_Kohana_Exсeption, который обрабатывает все типы исключений одинаково, используя одно лишь представление (system/views/kohana/error.php) . Но ничто нам не мешает создать свой класс обработки исключений, унаследовав его от системного, и заложить свою логику. Начнем. Обратите внимание, что я буду рассказывать на примере Kohana Framework версии 3.2. Это принципиально, потому что в разной версии это делается немного по разному, хотя общий принцип схож. Шаг 1. Создать класс application/classes/kohana/exception.php: Код:
Комментарии в коде. Обратите внимание, что в самом начале есть проверка: Код:
В Кохане существует несколько состояний проекта для удобства. Kohana::PRODUCTION – готовый проект Kohana::STAGING – подготовка к релизу Kohana::TESTING – тестирование Kohana::DEVELOPMENT – разработка (по умолчанию) Это просто константы. Например, мы можем установить текущее состояние проекта на PRODUCTION и только в этом случае обрабатывать исключения по-своему. Если же стадия DEVELOPMENT, то нам просто необходимо видеть, где у нас ошибки в проекте, это помогает при разработке. Давайте так и сделаем. Как же установить текущее состояние проекта? Если заглянуть в bootstrap.php, то можно увидеть следующее: Код:
Здесь мы видим, что текущее состояние проекта, то есть Kohana::$environment, берется из переменной окружения $_SERVER['KOHANA_ENV'], которую можно определить в файле .htaccess вот так: SetEnv KOHANA_ENV production Теперь у нас проект на последней стадии готовности. Шаг 2. Создать контроллер controllers/error.php Код:
Как вы видите, для каждого кода ошибки мы можем создать свой экшен и обрабатывать, как душе угодно. Шаг 4. Создать View для экшенов views/errors/404.php views/errors/403.php views/errors/500.php В этих вьюшках можно в данном случае использовать переменные title и message(сообщение об ошибке). Все это делается, конечно же, в папке с проектом application. Шаг 3. А про роутер-то забыли! Наш класс Kohana_Exception будет обращаться к роутеру Route::get(‘error’)->… Хм…а его и нет. Давайте исправим эту оплошность: Создаем роутер в bootstrap.php Код:
Вот и все, поздравляю! Теперь, чтобы вызвать сообщение об ошибке, в нужном месте выкидываем исключение: Код:
или с передачей параметров: Код:
Как это работает? Класс Kohana_Exeption отлавливает исключение, проверяет переменную окружения, если не DEVELOPMENT, то обращается к роутеру error, который вызывает соответствующий экшен контроллера Controller_Error (в зависимости от кода ошибки) и выводит результат. Источник: Школа программирования |
Автор: | admin [ 20 фев 2012, 23:50 ] |
Заголовок сообщения: | Re: Production окружение |
Да кстати..чтобы не мыкаться постоянно поправляя окружение, можно в бутстрапе написать Код:
Ну и по поводу несуществующих страниц..у меня роутинг настроен таким образом, что в таком случае кидает на какую-то одну страницу, например на главную (не редирект, а именно настройки роутов). Вы можете выдавать "Несуществующая страница", ваше право ![]() |
Автор: | vomchik [ 21 фев 2012, 00:34 ] |
Заголовок сообщения: | Re: Production окружение |
Спасибо. |
Автор: | root [ 24 фев 2012, 00:40 ] |
Заголовок сообщения: | Re: Production окружение |
admin писал(а): Ну и по поводу несуществующих страниц..у меня роутинг настроен таким образом, что в таком случае кидает на какую-то одну страницу, например на главную (не редирект, а именно настройки роутов). Вы можете выдавать "Несуществующая страница", ваше право ![]() Это не очень хорошо в плане seo. 404 должна быть и с верным заголовком, а не просто заглушкой. |
Автор: | admin [ 24 фев 2012, 01:23 ] |
Заголовок сообщения: | Re: Production окружение |
В чем вред в плане Сео того, что при вводе в адресной строке чего-то вроде site.ru/tralala/blablabla юзер попадает на главную страницу, а не на страницу "несуществующая страница" ? И это при учете того, что таких внутренних ссылок на сайте нет, т.е. ПМ не будет по таким ссылкам шляться. |
Автор: | root [ 24 фев 2012, 01:53 ] |
Заголовок сообщения: | Re: Production окружение |
Со временем такие ссылки могут появиться, и не обязательно на искомом сайте, а на любом стороннем ресурсе. В плане seo это плохо, так как для поискового бота это будет дублирование контента, что не есть хорошо. Да и стандарты для чего то же были придуманы ![]() А если уж так хочется перекинуть пользователя на нужную страницу, то это можно сделать ява скриптом. upd: ещё один пример - вы удаляете страницу, которая уже есть в индексе, бот не будет знать об этом и зачтет дублирование. |
Автор: | demyan112rv [ 26 июн 2012, 19:35 ] |
Заголовок сообщения: | Re: Production окружение |
Вроде все по инструкции сделал, а немного не корректно работает Если закомментить строку SetEnv KOHANA_ENV production (перевести в режим DEVELOPMENT), то выводит следующее: Код:
Если раскомментить строку SetEnv KOHANA_ENV production (перевести в режим PRODUCTION), то выводит следующее: Код:
Т.е. в режиме DEVELOPMENT текст изменяется на "Страница не найдена", а в PRODUCTION - нет |
Страница 1 из 1 | Часовой пояс: UTC + 4 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |