codeigniter 的 view() 函数传参需严格遵循框架版本规范:ci3 中仅支持两个参数(视图路径和数据数组),数据须为关联数组且键名避开保留字,子视图路径须相对于 application/views/;ci4 改用全局函数 view(),参数为视图路径和数据数组,必须 return 且路径大小写敏感。

view() 函数怎么传参才不会报错
CodeIgniter 的 view() 函数默认只接受两个参数:视图路径字符串和可选的数据数组。传第三个参数、传对象而非数组、或把数据键名写成 PHP 保留字(比如 class、function),都会导致视图里变量不可用,甚至报 Undefined variable 警告。
- 数据必须是关联数组,键名避开
__construct、$this、self这类敏感词 - 如果想传对象,先用
(array) $obj强转,否则视图中无法直接$name访问 - 路径不带
.php后缀,也不加application/views/前缀——写view('user/profile')就行,框架自动补全
加载子视图时路径怎么写才不 404
在主视图里用 $this->load->view() 加载子视图,路径是相对于 application/views/ 的,不是相对于当前视图文件位置。很多人误以为“同目录下可以直接写文件名”,结果提示 Unable to load the requested file。
- 子视图路径仍需完整写出层级,比如主视图在
views/admin/dashboard.php,要加载同级的sidebar.php,得写$this->load->view('admin/sidebar'),不能写'sidebar' - 不要在路径里加斜杠开头(如
/user/list),会触发绝对路径查找,直接失败 - CI3 默认不支持嵌套数组传入子视图,如果父视图传了
['users' => [...]],子视图里还是只能用$users,别试图用$data['users']
为什么 $this->load->view() 不输出内容
因为 view() 默认把渲染结果返回为字符串,而不是直接 echo。你没接住它,它就丢了。常见于在控制器里写了 $this->load->view('welcome') 却看不到页面,其实是被当成返回值扔掉了。
- 要输出,必须显式设置第三个参数为
TRUE:$this->load->view('welcome', [], TRUE),然后自己echo或return - 更常见的是在控制器末尾漏掉
return或exit,导致后续代码继续执行,甚至二次输出 header - CI3 中,如果开启了输出缓存(
$this->output->enable_profiler(TRUE)),也可能掩盖真实输出行为,调试时建议先关掉
CI4 的 view() 和 CI3 完全不兼容
如果你从 CI3 切到 CI4,直接复制 $this->load->view() 写法会报 Call to undefined method。CI4 彻底移除了 $this->load,改用全局函数 view(),且参数顺序和语义都变了。
- CI4 写法是
return view('pages/home', ['title' => 'Home']);,没有$this->load,也不再有布尔型第三个参数 - CI4 的
view()必须return,不能只调用;否则响应体为空 - CI4 视图路径默认从
app/Views/开始,大小写敏感,Pages/home和pages/home是两个路径










