Kohana 2 Custom 404 страницы с ошибками - PullRequest
1 голос
/ 21 марта 2012

В Kohana 2 вы можете переопределить страницу ошибки по умолчанию, создав собственный файл kohana_error_page.php и поместив его в свой каталог просмотра. Однако это переопределяет ВСЕ ошибки, а не только 404. В случае 500 ошибок, я все еще хотел бы получить дружественную страницу ошибки оранжевого kohana.

У кого-нибудь есть опыт в этом?

Ответы [ 2 ]

3 голосов
/ 04 апреля 2012

Вы можете сделать это в KO2 довольно просто с помощью hooks . Если вы посмотрите на события , вы найдете system.404, который вам нужно заменить, используя что-то вроде:

<?php defined('SYSPATH') or die('No direct script access.');

// Replace the default kohana 404
Event::replace('system.404', array('Kohana', 'show_404'), 
    array('hook_404', 'show'));

class hook_404 {
    public function show()
    {
        // first param is URI of page, second param is template to use
        Kohana::show_404(FALSE, 'custom_404');
    }

}

Сохраните это в каталоге hooks в папке вашего приложения (или в модуле). Не забудьте включить хуки в вашей конфигурации:

$config['enable_hooks'] = TRUE;

И добавьте свой пользовательский вид 404: views/custom_404.php.

Примечание: они не будут отображаться, если у вас $config['display_errors'] установлено в FALSE в вашем config.php (что, вероятно, должно быть, если вы правы в IN_PRODUCTION?). Для этого нужно что-то вывести и умереть, например. замените Kohana::show_404 на следующее:

require Kohana::find_file('views', 'custom_404');
die();
2 голосов
/ 22 марта 2012

Я не проверял это !! Поэтому сделайте резервную копию своего кода, прежде чем сделать это.

Если я не ошибаюсь, Kohana2 имеет жестко запрограммированную обработку исключений, и нет прекрасного способа добавить новые исключения. Чтобы обойти это, вам придется внести изменения в ядро.

В файле system/i18n/en_US/errors.php

  • добавить новую запись:

    E_PAGE_ACCESS_DENIED => array( 1, 'Access Denied', ' -- message text-- ')
    

В файле system/i18n/en_US/core.php

  • добавить новую запись:

    'page_access_denied' => 'You are not permitted to access %s .'
    

В system/core/Koahana.php:

  • в верхней части метода Kohana :: setup (), добавьте новую константу:

    define('E_PAGE_ACCESS_DENIED', 69);
    
  • зарегистрируйте событие для вашей пользовательской ошибки (где-то в конце того же самого Kohana::setup() вы увидите регистрацию для 404-й ошибки):

    Event::add('system.403', array('Kohana', 'show_403'));
    
  • далее найдите местоположение для Kohana::show_404() и создайте свой собственный метод:

    public static function show_403($page = FALSE, $template = FALSE)
    {
        throw new Kohana_403_Exception($page, $template);
    }
    
  • прокрутите вниз до конца файла .. там вы найдете определение класса для Error_404_Exception ... make для 403. Не забудьте:

    1. определить новую переменную protected $template = 'file_name_for_template';
    2. protected $code = E_PAGE_ACCESS_DENIED;
    3. Exception::__construct(Kohana::lang('core.page_access_denied', $page));
    4. header('HTTP/1.1 403 Forbidden');

    файл шаблона должен находиться в system / views /

Теперь вы должны иметь возможность звонить Event::run('system.403'); из любой точки приложения.

...