Codeigniter show_404()中的自定义视图不工作

Codeigniter show_404()中的自定义视图不工作,codeigniter,exception,error-handling,routing,http-status-code-404,Codeigniter,Exception,Error Handling,Routing,Http Status Code 404,我尝试了404_覆盖和我的_异常来显示自定义错误视图。谁能帮我一下吗 这是404_覆盖代码 Routes.php $route['404_override'] = 'error/index'; Error.php <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Error extends CI_Controller { public $user_id ='';

我尝试了404_覆盖和我的_异常来显示自定义错误视图。谁能帮我一下吗

这是404_覆盖代码

Routes.php

$route['404_override'] = 'error/index';
Error.php

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

class Error extends CI_Controller {

    public $user_id ='';

    function __construct()
    {
        parent::__construct();
        $this->load->library('login.php');
        $user_Details = $this->login_library->get_user_details();
        $this->user_id = $user_Details['user_id'];
    }

    public function index()
    {
        $this->output->set_status_header('404');
         $this->output->set_status_header('404');  
        $this->load->view('view_header',$this->user_id); 
        $this->load->view('view_404');
        $this->load->view('view_footer',$this->user_id);     
    }



}

尝试将config.php更改为

$config['uri_protocol'] = "REQUEST_URI";

有效吗?

我从这个链接得到了解决方案-


如果要显示自定义404模板

您需要更改$route['404_override']='welcome/page_not_found';在config/routes.php文件中

并在控制器中写入操作

public function page_not_found(){
    $this->data['page_title'] = 'Page Not Found!';
    $this->load->view('layouts/page_not_found.php', $this->data);
}
重要提示:页面未找到操作应位于默认控制器中
(您可以从config/routes.php中设置默认控制器,$route['default_controller']='welcome')

我遇到了类似的问题,尝试扩展Exceptions类,但codegniter不支持扩展Exceptions类

为了覆盖show_404()方法,这对我很有用

创建一个助手方法

if ( ! function_exists('custom_show_404'))
{
    /**
    * Method Name custom_show_404
    *
    */
    function custom_show_404()
    {
        $CI =& get_instance();
        $CI->load->view("not_found_page");

        //log message
        log_message('error','PAGE NOT FOUND ETC...');
    }
}
之后,在应用程序/控制器文件夹中查找所有
show_404()
方法调用,并将其替换为
custom_show_404()


注意:别忘了加载包含您的新方法的帮助文件

我来不及回答这个问题,但这可能会帮助其他寻找此问题解决方案的人

我尝试了由提议的签名,但它不起作用,因为
show_404
签名必须与它覆盖的签名相同

我已经用新的类替换了核心类
CI_Exceptions

<?php
// application/core/MY_Exception.php
class MY_Exceptions extends CI_Exceptions
{
    /**
     * Show a custom 404 error
     */
    public function show_404($page = '', $log_error = TRUE)
    {
        $CI =& get_instance();
        $data['title'] = '404 Page Not Found!';
        $output = '';
        $output .= $CI->load->view('templates/header', $data, true);
        $output .= $CI->load->view('error_404', '', true);
        $output .= $CI->load->view('templates/footer', $data, true);
        set_status_header(404);
        echo $output;
        exit;
    }
}

您必须通过show_404()函数编辑CodeIgniter的核心文件才能使用自定义404页面。只需转到\system\core\Common.php并用以下代码替换show_404()函数:

function show_404($page = '', $log_error = TRUE)
{
     $ci = get_instance();
     $ci->output->set_status_header(404);
     $ci->load->view('404');
     echo $ci->output->get_output();
     exit(4);
}
注意:请用您的自定义页面替换您的自定义页面 404页


它在我自己的Codeigniter应用程序上正常工作。我希望它能正常工作

我不确定你想要实现什么,但这可能会有所帮助:我认为这是很有解释力的。这是一个简单的问题。使用$route['404_override']有什么办法吗?如果你想使用自定义的404错误页面,你不必扩展
CI_异常
core类,你的
error
控制器对我来说很好。在
index()
方法中回显
$this->user\u id
,以确保它工作。它不工作。我尝试了两种方法,即routes.php和我的_异常,但我的错误。我不知道我到底在哪里犯错。我应该尝试一个新的CI项目和404_覆盖,以检查是我的其他项目在做它,还是它是一个CI错误。它在我的版本中不工作,但在新版本中工作。谢谢谢谢你的帮助。我还尝试了show_404(),无论我想在哪里调用该错误函数,但它不起作用。感谢你的帮助,但事实并非如此。它会为自定义行为覆盖它,这是唯一可以完成的。
<?php
// application/core/MY_Exception.php
class MY_Exceptions extends CI_Exceptions
{
    /**
     * Show a custom 404 error
     */
    public function show_404($page = '', $log_error = TRUE)
    {
        $CI =& get_instance();
        $data['title'] = '404 Page Not Found!';
        $output = '';
        $output .= $CI->load->view('templates/header', $data, true);
        $output .= $CI->load->view('error_404', '', true);
        $output .= $CI->load->view('templates/footer', $data, true);
        set_status_header(404);
        echo $output;
        exit;
    }
}
function show_404($page = '', $log_error = TRUE)
{
     $ci = get_instance();
     $ci->output->set_status_header(404);
     $ci->load->view('404');
     echo $ci->output->get_output();
     exit(4);
}