codeigniter视图加载失败最常见原因是路径或命名不匹配:视图必须置于application/views/下,子目录需显式声明,文件名严格区分大小写且不带.php后缀,同时控制器须正确继承ci_controller并调用parent::__construct()。

视图文件路径或命名不匹配
最常见原因是视图文件没放在正确位置,或者文件名和 $this->load->view() 传入的参数对不上。CodeIgniter 3 严格按路径查找,不会自动补全或忽略大小写。
- 视图必须存放在
application/views/下,子目录需显式写进路径,比如$this->load->view('pages/about')对应application/views/pages/about.php - 文件扩展名必须是
.php,且不能带多余空格或隐藏字符(尤其从 Windows 复制过来时容易有 BOM) - Linux 服务器区分大小写:
$this->load->view('Header')找不到header.php,必须写成'header' - 不要加
.php后缀——$this->load->view('welcome_message.php')会尝试加载welcome_message.php.php
控制器未正确继承 CI_Controller 或构造函数出错
如果控制器类没继承 CI_Controller,或者构造函数里提前用了 $this->load 但没先调用 parent::__construct(),视图加载器根本不可用。
- 确认类声明是
class Welcome extends CI_Controller,不是class Welcome或extends Controller(旧版写法已失效) - 若重写了
__construct(),第一行必须是parent::__construct();,否则$this->load为空对象 - 构造函数里不要放耗时操作或 die/exit,会中断后续流程,导致视图不渲染
视图中引用了未传递的变量
虽然这通常报 Undefined variable 而非“加载不了”,但部分 PHP 配置(如 error_reporting = E_ALL & ~E_NOTICE 关闭)会让页面空白,看起来像“没加载成功”。
- 检查控制器是否真调用了
$this->load->view('xxx', $data),而不是只写了$this->load->view('xxx')却没传第二参数 - 确认
$data是数组,且键名与视图中使用的变量名完全一致(比如$data['title']→ 视图用$title) - 若视图里用了
$this->load->view()嵌套加载子视图,确保子视图路径也合法,否则整个外层视图会静默失败
index_page 配置或 .htaccess 导致请求未进框架
表面看是“控制器加载不了视图”,实际可能是请求压根没走到 CodeIgniter,而是被 Web 服务器直接返回 404 或空白页。
- 检查
application/config/config.php中$config['index_page']是否设为'index.php'(默认值),如果清空了又没配好重写规则,URL 就会 404 - 确认
.htaccess文件存在且生效(Apache 需开启mod_rewrite),内容至少包含RewriteRule ^(.*)$ index.php/$1 [L] - 临时把
$config['index_page'] = 'index.php';,然后访问http://yoursite.com/index.php/welcome测试是否恢复——能打开就说明是 URL 重写问题
var_dump(APPPATH.'views/welcome_message.php');,看看拼出来的路径是否存在、可读。











