CodeIgniter 4.3.8调试工具栏不显示的根本原因是CI_ENVIRONMENT未正确设为development或关键配置被覆盖;需确保.env首行无空格无引号地设置CI_ENVIRONMENT=development,Toolbar.php中$collectors非空且$maxHistory≥1,并清空writable/debugbar/缓存。

CodeIgniter 4.3.8 调试工具栏为什么没显示?
根本原因不是“没开启”,而是 CI_ENVIRONMENT 没设对或关键配置被覆盖。调试工具栏(Debug Toolbar)只在 development 环境下自动加载,且要求 app/Config/Toolbar.php 中的 $collectors 不为空、$maxHistory ≥ 1。
常见错误现象:
- 页面底部空白,Network 面板看不到
/debugbar请求 - 浏览器控制台报 404 或 500,但没提示具体哪行出错
-
index.php里手动设了define('CI_ENVIRONMENT', 'development'),却仍不显示——说明被.env文件覆盖了
实操建议:
- 确认
.env文件第一行是CI_ENVIRONMENT = development(不能有空格,不能用引号) - 检查
app/Config/Toolbar.php,确保$collectors数组至少包含'CodeIgniter\Debug\Toolbar\Collectors\Database'或'CodeIgniter\Debug\Toolbar\Collectors\Logs' - 若用了自定义
public/index.php,删掉其中任何对CI_ENVIRONMENT的重复定义,以.env为准 - 清空
writable/debugbar/目录(旧缓存可能阻塞新收集器注册)
数据库查询没出现在 Debug Toolbar 的 Database 面板?
不是 SQL 没执行,而是 CI4 的查询收集依赖 Database Collector 显式启用,且仅捕获通过 $db->query()、$model->findAll() 等标准接口发出的语句——手写原生 mysqli_query() 或绕过 Query Builder 的调用不会上报。
实操建议:
- 打开
app/Config/Toolbar.php,检查$collectors是否包含'CodeIgniter\Debug\Toolbar\Collectors\Database';若注释掉了,取消注释 - 确保数据库配置中
'DBDebug' => true(在app/Config/Database.php的$default组里) - 避免在模型中使用
$this->db->simpleQuery(),改用$this->db->table('users')->get()——前者不触发 collector 注册 - 若用了事务块(
$this->db->transStart()),需等transComplete()后才会汇总到面板,别在中间就刷新页面
Debug Toolbar 显示 SQL 但参数全是 ? 占位符,怎么看到真实值?
这是 CI4 默认行为:为防敏感信息泄露,Database Collector 只显示预处理语句模板,不展开绑定参数。你不能靠它直接看到 WHERE id = 123,除非主动启用参数解析。
实操建议:
- 修改
app/Config/Toolbar.php,在$collectors对应的Database配置项后加一行:'show_bindings' => true - 或者,在
app/Config/Database.php的$default数组里加:'DBDebug' => true和'logThreshold' => 2,再配合app/Config/Logger.php开启日志记录,真实参数会落到writable/logs/文件里 - 注意:开启
show_bindings后,若查询含大量数据(如批量插入万条记录),Toolbar 渲染会明显变慢,仅限单次调试时临时启用
Debug Toolbar 报 “Failed to load resource: net::ERR_CONNECTION_REFUSED”?
这不是前端问题,而是 CI4 的 Debug Toolbar 后端服务(DebugBarDebugBar)尝试向本地 http://localhost:8080/debugbar 推送数据失败,本质是 Apache/Nginx 没把 /debugbar 路由代理给 PHP 处理。
实操建议:
- 确认
public/.htaccess(Apache)或 Nginx 配置里,所有非静态资源请求都 fallback 到index.php——CI4 的路由规则必须覆盖/debugbar/* - 如果用的是内置 PHP server(
php -S localhost:8080 router.php),确保router.php文件末尾有:if (strpos($_SERVER['REQUEST_URI'], '/debugbar') === 0) { return false; },否则静态文件无法被正确响应 - Docker 环境下,检查 nginx 配置是否漏写了
location /debugbar { try_files $uri $uri/ /index.php?$query_string; } - 最简验证法:直接访问
http://localhost:8080/debugbar/openhandler,返回 JSON 即正常;404 就说明路由没通
.env 里一个空格就能让它彻底静音。这些点不手动验证一遍,光看文档永远以为是“功能坏了”。


















