在 Kohana 2 中,您可以通过创建自定义 kohana_error_page.php 文件并将其放在您的视图目录中来覆盖默认错误页面。但是,这会覆盖所有错误,而不仅仅是 404 错误。在 500 错误的情况下,我仍然希望获得友好的橙色 kohana 错误页面。
有没有人有这样做的经验?
在 Kohana 2 中,您可以通过创建自定义 kohana_error_page.php 文件并将其放在您的视图目录中来覆盖默认错误页面。但是,这会覆盖所有错误,而不仅仅是 404 错误。在 500 错误的情况下,我仍然希望获得友好的橙色 kohana 错误页面。
有没有人有这样做的经验?
你可以在 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();
我没有测试过这个!!因此,在执行此操作之前备份您的代码。
如果我没记错的话,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');
。