Php CodeIgniter中带有模板的自定义错误页

Php CodeIgniter中带有模板的自定义错误页,php,error-handling,codeigniter-2,custom-error-pages,Php,Error Handling,Codeigniter 2,Custom Error Pages,我正在使用CodeIgniter的模板库,现在我也想实现自定义错误页面。我发现了一种方法,它涉及扩展默认路由器的MY_路由器:但它只处理404错误。我希望所有错误显示一个简单的用户友好的页面,包括数据库错误等,我希望它通过一个控制器,部分是为了我可以使用模板库,部分是为了我还可以实现一个电子邮件功能,向我自己发送有关发生错误的信息 有人问我如何为其他错误扩展上述MY_Router方法的功能,如error_db,但作者没有回答,因此我在这里想看看是否有人知道如何按照上述方法或任何其他简单的实现方法

我正在使用CodeIgniter的模板库,现在我也想实现自定义错误页面。我发现了一种方法,它涉及扩展默认路由器的MY_路由器:但它只处理404错误。我希望所有错误显示一个简单的用户友好的页面,包括数据库错误等,我希望它通过一个控制器,部分是为了我可以使用模板库,部分是为了我还可以实现一个电子邮件功能,向我自己发送有关发生错误的信息

有人问我如何为其他错误扩展上述MY_Router方法的功能,如error_db,但作者没有回答,因此我在这里想看看是否有人知道如何按照上述方法或任何其他简单的实现方法来实现这一点。请注意,我是一个新手,所以不要对我的基本CodeIgniter功能知识假设太多:-)

我是这样做的: 我创建了自己的错误页面,每当我抛出404错误时,我都会加载404页面

假设我的默认控制器是site.php,那么我的site.php如下所示:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Site extends CI_Controller {

    public function index()
    {
        $this->load->view('welcome_message');
    }

    public function view($page = "home" , $function = "index")
    {
        do_something();
        if($status == "404")
        {
            $function = "404";
        }
        $this->load->view('templates/header', $data);
        $this->load->view($page.'/'.$function, $data);      
        $this->load->view('templates/footer', $data);
    }




}

/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */
<?php $this->load->view('includes/header'); ?>
...
...
<?php $this->load->view('includes/footer'); ?>

我已经为Exceptions类创建了一个扩展。
在这个扩展中,我替换了
$this->Exceptions->show_error()
方法,该方法由CI的
show_error()
函数使用

当我调用show_error('用户未登录',401)时
此自定义方法首先查找错误\ucode>$status\u code文件。在上面的示例中,它将查找错误_401.php文件

当这个文件不存在时,它将只加载error_general.php文件,就像默认的
$this->Exceptions->show_error()可以

在您的情况下,您可以在库、控制器或任何可能引发错误的地方使用以下代码


创建自定义错误页面的最简单方法是编辑
/application/views/errors/html/error.*.php
上的文件,例如
error.\u 404.php
(对于404s)、
error.\u db.php
(对于数据库错误)和
error.\u general.php
(对于大多数其他错误)

由于这些页面位于您的
应用程序
目录中,您可以根据自己的需要自由定制它们

如果普通视图模板的外观如下所示:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Site extends CI_Controller {

    public function index()
    {
        $this->load->view('welcome_message');
    }

    public function view($page = "home" , $function = "index")
    {
        do_something();
        if($status == "404")
        {
            $function = "404";
        }
        $this->load->view('templates/header', $data);
        $this->load->view($page.'/'.$function, $data);      
        $this->load->view('templates/footer', $data);
    }




}

/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */
<?php $this->load->view('includes/header'); ?>
...
...
<?php $this->load->view('includes/footer'); ?>
请注意,我们不再使用视图,而是包含
页眉
页脚
的视图文件

另外要注意的是:

标题
视图中,我正在传递一个
$data
对象,其中包括
$data['page\u title']
。由于错误页面不使用视图,因此必须添加通常传递到视图中的任何变量,从而出现
$page\u title

config/routes.php 
编辑

在此处键入控制器,例如错误


创建一个函数索引并加载您的视图

查看
/application/errors/error.*
文件,有db error、404、php error和general errors模板,因此您可以使用它,您可以扩展CI核心类(恰好需要扩展CI_异常),如我所述,我知道错误文件,但我不知道如何让他们使用模板库,使他们看起来像网站的其余部分。如何扩展CI核心类以实现这一点?请提供一个例子的答案…我不知道你的网站是如何设计的,但该文件包含它自己的设计,你想改变,我不认为这是很难做到的,如果你知道怎么做这无论如何仍然会发送HTTP 200代码。它只是给人一种拥有404的错觉。