codeigniter 3.0 自定义 404 未找到错误页面

codeigniter 3.0 custom 404 not found error page

我的问题是关于升级到 Codeigniter 3.0 后的自定义错误页面。

我曾经有一个 Errors 控制器来处理网站的 404 错误页面 - 在这个控制器上我自定义了页面的某些部分,例如如果用户已登录,它会在导航栏等 (是的,在 404 错误页面上)

升级到CI 3.0后,我注意到错误页面在different folder中处理,我开始迁移到这种方式;但问题是我无法将任何变量加载到此页面,例如 会话变量 ,甚至无法在这些页面上使用任何 CI 的函数。

我认为这个页面应该只有 HTML 个页面,但是有没有办法将变量加载到这些错误页面?

您需要在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 视图。就这些!

参考:Reserved Routes

效果很好,但如果重定向到错误,例如 404 函数 show_404,您的控制器将不会加载您的视图,对于 show_404 方法中的真正 404,您有前往 codeigniter 的核心并触摸它。

\system\core\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);
}

它在 codeigniter 3 中不起作用,我覆盖了默认视图 (application/views/errors/html/error_404.php) 并添加了我的自定义视图,现在 show_404() 工作正常。

在 Codeigniter 3 中,我没有调用 show_404(),而是重定向到自定义错误控制器函数。

例如对于上述情况

if (404 condition...) {
    redirect("my404");
}

要使用 show_404 () 函数,您不需要访问 CI 内核并更改它们的通话方式。 只需使用 $CI->load->view(...)

使标准 404 视图加载您的 404 视图

这将保留请求的原始 404 代码,不会进行不必要的重定向或核心更改。

$CI =& get_instance();
$CI->load->view('error-404');