将所有404错误页面重定向到自定义404页面Codeigniter HMVC

3
我已在我的主页控制器中创建了一个自定义的404未找到方法。
我设置了`$route['404_override'] = 'home/notfound';`,这对于在主域名后面找不到的URL(例如www.domain.com/uroetiuosyerit)很有效。
但是,如果我输入一个类名,然后是一个无效的URL(例如www.domain.com/services/yersityijftnyutyum),它会显示CodeIgniter默认的404内容。
我正在使用带有hmvc模型扩展的CodeIgniter 3https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc

所以home是一个控制器而不是notfound函数?对吗?那么home在哪里?您需要将其从hmvc结构中取出,以提供“catch all”。 - Vickel
但我想使用我的模板模块来显示一个漂亮的样式化404页面,那么如何从普通的CodeIgniter控制器中调用“模块”? - toiglicher
2个回答

4

例如,可以设置类似于这样的路由

$route['404_override'] = 'errormanager/my404';

然后创建一个控制器errormanager,其中包含以下函数:

public function my404(){

    $data['menu']=$this->Sitemanager->get_menu();

    $this->load->view('header',$data);
    $this->load->view('custom404');
    $this->load->view('footer');    
}

并创建一个像这样的 viewcustom404.php

<div class="my404"> 404 this page does not exist</div>

当您使用HMVC方法时,请确保从任何地方都可以访问控制器errormanager和视图,这意味着您需要将其定位在Codeigniter控制器+视图文件夹中(application\views和application\controller),而不是扩展模块HMVC结构。


0
application/controlers 文件夹中创建类似 My404 的控制器,并添加以下代码:
<?php defined ('BASEPATH') or exit ('No direct script acces allowed');

class My404 extends CI_Controler {

  public function __construct()
  {
  parent::__construct();
  }

  public function index()
  {
  $this->output->set_status_header('404');
  $this->load->view('err404');
  }

}

接下来,在 application/config/routes.php 文件中设置路由:
$route['404_override'] = 'my404';

现在,您可以在 application/view 文件夹中创建视图,并添加以下代码:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>
<?php
$ci = new CI_Controller();
$ci =& get_instance();
$ci->load->helper('url');
?>
<!DOCTYPE html>
<html lang="en">
  <head>
   <meta charset="utf-8">
   <title>404 Page</title>
  </head>
<body>
 <div>
  <p>How to Create Custom Codeigniter 404 Error Pages </p>
   <div>
    <p><a href="<?php echo base_url(); ?>">Go Back to Home</a></p>
  </div>
 </div>
</body>
</html>

或者您可以从您的主题或模板进行自定义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接