view() 是 CodeIgniter 4 的核心视图加载函数,需在控制器中调用,默认从 app/Views/ 加载无扩展名文件,支持传数据数组和第三个布尔参数控制返回字符串或直接输出。

view() 函数的基本调用方式
view() 是 CodeIgniter 4 的核心视图加载函数,必须在控制器方法中调用,不能直接在视图或模型里用。它默认从 app/Views/ 目录下找文件,路径不带扩展名,也不加前缀斜杠。
- 调用
view('home')会加载app/Views/home.php - 调用
view('admin/dashboard')会加载app/Views/admin/dashboard.php - 第二个参数是可选的数据数组,比如
view('user/profile', ['name' => 'Alice']),这些键会自动转为视图里的变量($name可直接用)
别写成 view('/home') 或 view('home.php') —— 会报错或静默失败。
传参时数据被忽略?检查是否用了引用传递或覆盖了 $data
常见现象:明明传了 ['title' => 'My Page'],视图里却拿不到 $title。
- 确保没在视图开头手动重置
$data,比如写了$data = [] - 不要用引用传递修改原始数组(如
&$data),view()内部不依赖引用 - 如果用了
ViewBuilder手动实例化(比如service('renderer')),注意它不兼容原生view()的数据注入逻辑
典型错误写法:
$data = ['title' => 'Test'];
view('page', $data);
$data['title'] = 'Changed'; // 这行不影响已传入的视图加载子视图或嵌套布局怎么处理
CodeIgniter 4 不提供内置的 load->view() 嵌套语法(那是 CI3 的),所有视图都是扁平加载的。要在主视图里引入其他 PHP 文件,用原生 include() 或 require():
-
include view_path('partials/header')—— 需要先用view_path()获取完整路径 - 更推荐直接
include <strong>DIR</strong> . '/../partials/header.php'(相对路径更可控) - 别用
view('partials/header')在另一个视图里调用——这会触发新响应周期,导致 headers already sent 错误
注意:子视图文件里访问不到父视图传来的变量,除非显式 extract($data) 或统一用 $this->data 对象(需自行设计)。
为什么 view() 返回空字符串或直接输出而不是返回内容
view() 默认直接输出(echo)渲染结果,不是返回字符串。如果需要捕获内容(比如用于邮件模板、缓存写入),必须传第三个参数 true:
-
view('email/body', $data, true)→ 返回字符串 -
view('email/body', $data, false)→ 默认行为,直接输出(false可省略)
漏掉这个 true 是最常被忽略的点,尤其在做 API 响应包装或生成静态 HTML 时。另外,确保没在视图里提前 exit 或 die,否则后续输出中断,看起来像“空白”。
CI4 的 view() 没有 CI3 那样的 $this->load->view() 返回缓冲区开关,逻辑更简单,但也更不容错。


















