直接用 $this->load->view() 加载页面,需确保路径、文件名(全小写、不带.php)、变量传递正确;第一个参数为视图路径,第二个为传值数组,第三个设 true 可返回字符串而非直接输出。

直接用 $this->load->view() 就能加载页面,但必须确保路径、文件名、扩展名和变量传递方式都对,否则会报错或空白。
view() 函数的调用格式和参数含义
$this->load->view() 是最常用的方式,它只接受两个参数(第三个是 CI2 的遗留参数,CI3/CI4 已弃用):
- 第一个参数是视图路径字符串,比如
'home'或'pages/about',不带.php扩展名;CI 会自动在application/views/下搜索home.php - 第二个参数是可选的数组,用于向视图传值,例如
['title' => '关于我们', 'content' => $text] - 注意:该函数默认直接输出 HTML,不返回内容;若需捕获输出(比如嵌套渲染),得用
$this->load->view('xxx', $data, TRUE)—— 第三个参数设为TRUE才返回字符串
常见加载失败原因:路径和文件名陷阱
错误往往不是语法问题,而是文件系统层面没找对位置:
- 视图文件必须放在
application/views/目录下,子目录可以嵌套,但路径写法要匹配,比如$this->load->view('admin/dashboard')对应的是application/views/admin/dashboard.php - 文件名必须全小写,CI 默认关闭大小写敏感,但 Linux 服务器实际区分大小写,
About.php写成about.php才安全 - 不要手动加
.php,$this->load->view('home.php')会导致 CI 去找home.php.php,最终 404 - 如果视图在
application/views/templates/header.php,就写$this->load->view('templates/header'),不能漏掉templates/
如何在视图中安全使用传入的数据
控制器传进来的数组会自动展开为变量,但要注意作用域和类型:
- 传
$data = ['user' => $obj, 'count' => 5],视图里直接用$user和$count,不用$data['user'] - 如果传的是对象,视图里可以用
$user->name,但建议先判空:isset($user) && $user instanceof stdClass - 避免覆盖内置变量,比如别传
['view' => 'xxx'],否则视图里$view会被覆盖,可能破坏框架逻辑 - 如需全局变量(如网站标题),可用
$this->load->vars(['site_name' => 'MyApp']),之后所有后续view()都能访问$site_name
真正容易被忽略的是:CI 的视图加载器不会报“变量未定义”警告,而是静默输出空值。调试时建议在视图开头加 <?php var_dump(get_defined_vars()); ?> 快速确认数据是否到达。另外,CI4 改用 echo view('xxx', $data),函数签名和返回行为都变了,混用旧写法会直接报错。











