Laravel移除Composer包后send()调用空对象错误的解决方法
问题现象
访问项目根目录时,触发以下PHP致命错误,错误日志记录在laravel.log中:
WARN PHP Fatal error: Uncaught Error: Call to a member function send() on null in C:\xampp\htdocs\Atlas\club\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php:222. WARN Stack trace: WARN #0 C:\xampp\htdocs\Atlas\club\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php(199): Illuminate\Foundation\Bootstrap\HandleExceptions->renderHttpResponse(Object(Error)). WARN #1 C:\xampp\htdocs\Atlas\club\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php(259): Illuminate\Foundation\Bootstrap\HandleExceptions->handleException(Object(Error)). WARN #2 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->Illuminate\Foundation\Bootstrap\{closure}(Object(Error)). WARN #3 {main}. WARN thrown in C:\xampp\htdocs\Atlas\club\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php on line 222. WARN PHP Fatal error: Uncaught Error: Call to a member function send() on null in C:\xampp\htdocs\Atlas\club\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php:222. WARN Stack trace: WARN #0 C:\xampp\htdocs\Atlas\club\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php(199): Illuminate\Foundation\Bootstrap\HandleExceptions->renderHttpResponse(Object(Symfony\Component\ErrorHandler\Error\FatalError)). WARN #1 C:\xampp\htdocs\Atlas\club\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php(235): Illuminate\Foundation\Bootstrap\HandleExceptions->handleException(Object(Symfony\Component\ErrorHandler\Error\FatalError)). WARN #2 C:\xampp\htdocs\Atlas\club\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php(259): Illuminate\Foundation\Bootstrap\HandleExceptions->handleShutdown(). WARN #3 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->Illuminate\Foundation\Bootstrap\{closure}(). WARN #4 {main}. WARN thrown in C:\xampp\htdocs\Atlas\club\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php on line 222.
此前安装过nWidart/laravel-modules包,已执行以下移除操作但问题未解决:
- 使用
composer remove nWidart/laravel-modules移除包 - 删除配置文件
- 删除缓存文件
- 删除
composer.lock文件 - 更新
composer.json,移除Autoload中Module\相关行 - 执行
composer update - 执行
composer dumpautoload及composer dump -o - 删除
vendor目录 - 尝试用Git回滚修改
项目基础信息:
- Laravel版本:^9.2
- PHP版本:8.1.4
修复步骤
这个错误本质是Laravel的异常处理程序本身出错,说明存在一个未被捕获的原始错误,导致renderHttpResponse方法返回null,进而调用send()时触发报错。按以下步骤排查:
开启Debug模式查看原始错误
修改.env文件,设置APP_DEBUG=true,访问项目时会直接显示原始错误信息——当前日志只显示了异常处理的错误,没显示真正触发问题的根源。彻底清理Laravel缓存
执行以下命令清理所有缓存:php artisan cache:clear php artisan config:clear php artisan route:clear php artisan view:clear php artisan optimize:clear同时手动删除
bootstrap/cache目录下的所有文件(不要删除目录本身),这个目录的缓存可能残留Modules相关配置。检查配置文件残留
打开config/app.php,确认providers和aliases数组中没有任何Modules相关的条目,确保彻底移除包的服务注册。检查代码中的Modules引用
全局搜索项目代码(包括路由文件、控制器、模型等),查找是否有use Module\或Modules\的引用,这些残留的代码会触发致命错误,进而导致异常处理程序出错。重新安装依赖
删除vendor目录和composer.lock文件,执行composer install重新安装依赖(不要用composer update,避免更新其他包引入新问题)。检查入口文件和Bootstrap代码
查看public/index.php和bootstrap/app.php,确认没有残留Laravel Modules的初始化代码或配置。检查.env配置
确认.env文件中没有MODULES_PATH或其他与Modules相关的配置项,如有则删除。
内容的提问来源于stack exchange,提问作者Atlas-Pio

