Whoops 是一个 PHP 错误处理库,将原始错误转换为带高亮、堆栈和变量快照的交互式页面,仅用于开发环境,不适用于已集成类似调试器的 Laravel/Symfony 等框架。

Whoops 是什么,为什么不是所有项目都适合直接装
Whoops 是一个 PHP 错误处理库,它把 ParseError、FatalError、未捕获异常这些原本难读的白底黑字错误,换成带代码高亮、可展开堆栈、变量快照的交互式页面。但它**不是 Laravel 的 Debugbar**,也不内置日志写入或远程上报——它只负责“显示得更友好”。如果你用的是 Laravel、Symfony 等框架,它们已集成 Whoops 或类似机制(比如 Laravel 的 Ignition),手动装 Whoops 可能冲突或被覆盖。
用 Composer 安装 Whoops 的正确命令和位置
必须在项目根目录(即 composer.json 所在目录)运行:
composer require filp/whoops --dev
注意加 --dev:Whoops 仅用于开发环境,上线后应禁用。安装后会在 vendor/filp/whoops/ 下生成代码,并自动注册到 Composer 的 autoloader 中。不建议全局安装(composer global require),会导致路径混乱、版本难控。
手动启用 Whoops 的最小配置(非框架项目)
Whoops 不会自动生效,你得在入口文件(如 index.php)顶部显式注册。常见错误是把它放在 require 框架启动之后,结果被框架自己的错误处理器覆盖。
- 确保它在任何框架初始化、路由分发、DB 连接之前执行
- 典型写法(放在
index.php最开头):
$whoops = new \Whoops\Run(); $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler()); $whoops->register();
如果报错 Class 'Whoops\Run' not found,说明 autoloader 没加载——检查是否漏了 require 'vendor/autoload.php';,且它必须在 Whoops 初始化之前。
Laravel / Symfony 项目里别硬上 Whoops
现代 Laravel 默认用 spatie/laravel-ignition,它基于 Whoops 改造但更深度集成;Symfony 用 Symfony\Component\ErrorHandler\ErrorRenderer\HtmlErrorRenderer。强行替换会破坏调试信息(如 Blade 行号、请求上下文、缓存状态)。真要换,Laravel 需重写 App\Exceptions\Handler::render() 并禁用 Ignition,Symfony 则要改 error_handler.error_renderer.html 配置——这些改动容易导致 Whoops\Handler\PrettyPageHandler 拿不到 request 对象,最终白屏或报 Call to a member function getMethod() on null。
真正需要 Whoops 的场景,其实是裸 PHP 脚本、小型 CLI 工具、或某些老旧框架(如 CodeIgniter 3)——这时候才值得花时间配。否则,优先信任框架自带的调试器。










