在Kohana 2中,您可以通过创建自定义kohana_error_page.php文件并将其放在视图目录中来覆盖默认错误页面。但是,这会覆盖所有错误而不仅仅是404。在500错误的情况下,我仍然希望获得友好的橙色kohana错误页面。
有没有人有这方面的经验?
答案 0 :(得分:3)
您可以使用hooks轻松地在KO2中执行此操作。如果您查看events,您会找到system.404
,您需要使用以下内容替换{<1}}
<?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');
}
}
将其保存在app文件夹(或模块中)的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();
:
{{1}}
答案 1 :(得分:2)
我没有对此进行测试!! 请在执行此操作之前备份您的代码。
如果我没有弄错的话,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');
。