Codeigniter show_404()中的自定义视图不工作
我尝试了404_覆盖和我的_异常来显示自定义错误视图。谁能帮我一下吗 这是404_覆盖代码 Routes.phpCodeigniter 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 ='';
$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);
}