2012-03-21 21 views
1

Kohana 2では、カスタムkohana_error_page.phpファイルを作成してビューディレクトリに配置することで、デフォルトのエラーページを上書きできます。ただし、これは404だけでなくすべてのエラーを上書きします。 500エラーの場合、私はまだフレンドリーなオレンジ色のコナナのエラーページを取得したいと思います。Kohana 2カスタム404エラーページ

誰でもこれを経験しましたか?

+0

'.htaccess'を多分使用していますか? – k102

答えて

2

これはテストしていません。これを行う前にコードをバックアップしてください。

私が誤解していない場合、Kohana2にはハードコードされた例外処理があり、新しい例外を追加する方法はありません。この問題を回避するには、コアを変更する必要があります。ファイルで

system/i18n/en_US/errors.php

  • 新しいエントリを追加します。ファイルで

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

system/i18n/en_US/core.php

    を::のKohanaの上部付近

    • セットアップ()メソッドは、新しい定数を追加します:system/core/Koahana.php

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

  • は、新しいエントリを追加

    define('E_PAGE_ACCESS_DENIED', 69); 
    
  • 登録カスタムエラーのイベント(どこかで同じKohana::setup()の終わり近くに、あなたが第四百四エラーの登録が表示されます):

    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 ...のクラス定義があります。403のために1つを作成します。テンプレートファイルは、システム/ビュー/

    に位置しなければならない新しい変数protected $template = 'file_name_for_template';
  • protected $code = E_PAGE_ACCESS_DENIED;
  • Exception::__construct(Kohana::lang('core.page_access_denied', $page));
  • header('HTTP/1.1 403 Forbidden');
  • を定義

    1. :に忘れてはいけません

は、Event::run('system.403');をアプリケーション内のどこからでも呼び出すことができるになります。

+0

新しいエラーレベルを追加/呼び出すのは面白いですが、私は既存のエラーレベルに関心があります。 '非推奨'または '変数が定義されていません'というPHPの警告がスローされたとします。 Kohanaはそれらを500エラーとして扱い、404エラーのようにオレンジのエラーページを表示します。 kohana_error_page.phpファイルでデフォルトのエラーページを上書きすることはできますが、別のエラーページビューをどのように提供するのですか?私は404のための緑色のページと500のための赤いページが欲しい場合のように。 – Ray

+0

@レイ、私はあなたが特別なエラーコードのために特別なカスタムメッセージを追加したかったと思った。その場合は 'public static function exception_handler()'を探します。 '$ PHP_ERROR'でifがあり、' $ template'変数にそれがあります。あなたが別のエラーページに着陸できるようにする必要があります。 –

+0

ありがとう、私はシステムファイルを変更する必要がないいくつかの方法があることを期待していましたが、それが唯一の方法だと思います。私は一時的なハックだけでkohana_error_page.phpの 'Error Not'Page'のようなエラーのテキストをチェックしてから別のページに切り替えるだけですが、ちょっとチーズがかかります。 – Ray

3

これはKO2で非常に簡単にhooksとすることができます。アプリのフォルダ内(またはモジュールで)hooksディレクトリに

<?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'); 
    } 

} 

保存この:あなたはeventsを見れば、あなたはのようなものを使用して交換する必要がありますsystem.404を見つけることができます。

$config['enable_hooks'] = TRUE; 

そして、あなたのカスタム404ビューを追加します:views/custom_404.phpをあなたのconfigにフックを有効にすることを忘れないでください。

注:あなたがFALSEから$config['display_errors']セットを持っている場合、これらは表示されません、あなた(あなたがIN_PRODUCTION右のなら、それはおそらくあるべき?)config.php。そのために何かを出力して死ぬ必要があります。 Kohana::show_404を次のものに置き換えてください。

require Kohana::find_file('views', 'custom_404'); 
die(); 
関連する問題