如何在CodeIgniter模板中实现自定义404错误页面?
在CodeIgniter中实现模板化的自定义404错误页面
我明白你遇到的问题了——直接在MY_Exceptions里调用$this->load->view会报错,这是因为Exceptions类并没有继承CodeIgniter的Controller类,没法直接使用$this->load这个加载器。下面是一套完整的解决方案,帮你把404页面嵌入到现有模板里:
1. 正确扩展MY_Exceptions类
首先,在application/core/目录下创建或修改MY_Exceptions.php文件,重写show_404方法。我们需要通过get_instance()获取CodeIgniter的实例,这样就能正常使用视图加载器了:
<?php class MY_Exceptions extends CI_Exceptions { public function show_404($page = '', $log_error = TRUE) { // 获取CodeIgniter核心实例,这是关键! $CI =& get_instance(); // 定义404页面的标题和提示信息 $heading = "404 Page Not Found"; $message = "The page you requested was not found on our server."; // 如果传入了具体的页面路径,补充到提示信息里 if (!empty($page)) { $message .= " Requested page: " . $page; } // 记录错误日志(默认开启,可根据需要关闭) if ($log_error) { log_message('error', $heading . ': ' . $page); } // 准备模板所需的数据:把404视图的内容转为字符串,传给模板的$content变量 $data['content'] = $CI->load->view('error404', [ 'heading' => $heading, 'message' => $message ], TRUE); // 加载你的全局模板,并传递数据 $CI->load->view('pages/template.php', $data); // 终止程序执行,避免后续代码运行 exit; } } ?>
2. 调整模板和404视图的配合
确保你的模板文件pages/template.php里有一个用于渲染内容的占位符,比如:
<!DOCTYPE html> <html> <head> <title>My Website</title> <!-- 这里放你的全局CSS、JS等资源 --> </head> <body> <!-- 网站头部导航 --> <header> <nav> <!-- 你的导航链接 --> </nav> </header> <!-- 主要内容区域:这里会显示404页面的内容 --> <main> <?php echo $content; ?> </main> <!-- 网站底部 --> <footer> <!-- 底部版权信息等 --> </footer> </body> </html>
你的error404视图可以保持原来的样子,用来显示错误信息:
<h1><?php echo $heading;?></h1> <p><?php echo $message; ?></p>
3. 检查配置项
打开application/config/config.php,确保子类前缀配置正确(默认就是MY_,如果没改过就不用动):
$config['subclass_prefix'] = 'MY_';
测试验证
现在访问一个不存在的页面,比如http://your-domain.com/non-existent-page,应该就能看到嵌入在你模板里的404错误页面了。
如果还是有问题,可以查看application/logs/目录下的错误日志,根据具体报错信息排查问题~
内容的提问来源于stack exchange,提问作者rashmi ag
相关产品推荐
相关产品推荐

