我的问题是升级到Codeigniter 3.0后的自定义错误页面。
我曾经有一个Errors
控制器处理网站的404错误页面 - 在这个控制器上我已经定制了一些页面部分,例如如果用户登录,它在导航栏上显示用户名等等(是的,在404错误页面上)。
升级到CI 3.0后,我注意到错误页面是在different folder中处理的,我开始以这种方式迁移;但问题是我无法将任何变量加载到此页面,例如会话变量,或者甚至无法在这些页面上使用任何CI功能。
我认为这些页面应该只是HTML页面,但有没有办法将变量加载到这些错误页面?
答案 0 :(得分:16)
您需要在application/config/routes.php
中设置以下路线
$route['404_override'] = 'my404';
然后,您需要在控制器目录(application/controllers/)
<?php
class My404 extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function index()
{
$this->output->set_status_header('404');
$this->load->view('err404');//loading in custom error view
}
}
创建err404
视图。多数民众赞成!
答案 1 :(得分:1)
运行良好,但如果重定向到错误,例如404使用函数show_404,您的控制器将不会加载您的视图,对于show_404方法中的真实404,您必须转到codeigniter的核心并触摸它
\ SYSTEM \核心\的common.php
这是代码示例:
function show_404(){
$ci = get_instance();
$ci->output->set_status_header(404);
$ci->load->view('errors/error404_view');
echo $ci->output->get_output();
exit(4);
}
答案 2 :(得分:1)
它在codeigniter 3中无效,我覆盖默认视图(application/views/errors/html/error_404.php
)并添加了我的自定义视图,现在show_404()
工作正常。
答案 3 :(得分:0)
在Codeigniter 3中,我没有重定向到show_404()
,而是重定向到了自定义错误控制器功能。
例如对于上述情况
if (404 condition...) {
redirect("my404");
}
答案 4 :(得分:0)
要使用 show_404 () 函数,您无需访问 CI 核心并更改它们的对话方式。
只需使用 $CI->load->view(...)
这将保留请求的原始 404 代码,并且不会进行不必要的重定向或核心更改。
$CI =& get_instance();
$CI->load->view('error-404');