Kohana 2では、カスタムkohana_error_page.phpファイルを作成し、それをビューディレクトリに配置することで、デフォルトのエラーページを上書きできます。ただし、これは404だけでなくすべてのエラーをオーバーライドします。500エラーの場合でも、わかりやすいオレンジ色のコハナエラーページを取得したいと思います。
誰かがこれを行った経験がありますか?
Kohana 2では、カスタムkohana_error_page.phpファイルを作成し、それをビューディレクトリに配置することで、デフォルトのエラーページを上書きできます。ただし、これは404だけでなくすべてのエラーをオーバーライドします。500エラーの場合でも、わかりやすいオレンジ色のコハナエラーページを取得したいと思います。
誰かがこれを行った経験がありますか?
KO2では、フックを使用してこれを非常に簡単に行うことができます。イベントを見ると、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']
に設定している場合、これらは表示されません(IN_PRODUCTIONが正しい場合は、おそらく表示されますか?)FALSE
。config.php
そのためには、何かを出力して死ぬ必要があります。次のように置き換えKohana::show_404
ます。
require Kohana::find_file('views', 'custom_404');
die();
私はこれをテストしていません!! したがって、これを行う前にコードをバックアップしてください。
私が間違っていなければ、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
...のクラス定義があります403
。次のことを忘れないでください。
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');
テンプレートファイルはsystem/views/に配置する必要があります
これで、アプリケーションのどこからでも呼び出すことができるはずです。Event::run('system.403');