必须将 .env 文件中的 ci_environment 设为 development,且确保 debug toolbar 未被禁用、csp 策略允许内联脚本,否则工具栏不会加载。

必须改 .env 文件并确保 CI_ENVIRONMENT 值为 development,否则调试工具栏(Debug Toolbar)根本不会加载——它不依赖 PHP 的 display_errors 或 error_reporting 设置,而是由环境变量驱动的开关。
修改 .env 文件启用开发环境
CodeIgniter 4 的环境切换完全由 .env 文件控制,不是靠 index.php 里硬编码或服务器配置。如果你没这个文件,先复制 env(无后缀)并重命名为 .env:
- 确认
.env文件位于项目根目录(与public/同级) - 取消注释并修改这一行:
CI_ENVIRONMENT = development(不能是dev、local或空格后带注释) - 确保没有其他地方(如
public/index.php)覆盖了CI_ENVIRONMENT常量定义——CI4 会优先读取.env,但硬编码会强制覆盖 - 如果用 Apache,确认
.htaccess允许读取.env(默认允许;若禁用,需在php.ini中设variables_order = "EGPCS"并启用$_ENV)
确认 Debug Toolbar 已启用且未被禁用
即使环境是 development,Toolbar 仍可能被显式关闭。检查两个位置:
-
app/Config/Toolbar.php中的$collectors数组:确保至少保留Timers::class、Database::class等核心收集器;空数组会导致工具栏空白 -
app/Config/Toolbar.php中的$maxHistory和$maxLogs:值太小(如0或1)会导致面板无法展开或数据丢失 - 检查
app/Config/Filters.php是否误将toolbar别名从$globals['after']中移除——它必须在after阶段注册,否则响应已发送,无法注入 HTML
常见失败现象与对应排查点
工具栏“不显示”往往不是功能失效,而是被静默拦截或条件不满足:
- 页面返回 HTTP 302 重定向:Toolbar 只在 200 响应中注入,重定向响应体为空,自然没工具栏——检查是否触发了
LoginFilter或路由未匹配导致跳转 - 响应头含
X-Debug-Token但页面无工具栏:说明 Collector 正常工作,但前端 JS/CSS 资源 404;检查public/toolbar/目录是否存在,以及 Web 服务器是否允许访问该路径(Nginx 需额外配置location /toolbar) - 工具栏图标显示但点击无反应:通常是浏览器同源策略阻止了内联 script 执行——确认你没在
app/Config/Security.php中开启$cspEnabled = true却未配置$scriptSrc - 使用 CLI(如
php spark serve)时工具栏不出现:正常现象,Toolbar 默认只在 HTTP 请求中启用;如需 CLI 调试,得手动调用Services::toolbar()->initialize()
真正容易被忽略的是:CI4.6.4 默认启用了 Content-Security-Policy 头(通过 app/Config/Security.php 的 $cspEnabled),一旦开启却未放行 'unsafe-inline' 或非散列内联脚本,Toolbar 的 JS 就会被浏览器直接丢弃——连控制台报错都看不到,只会安静地消失。











