执行php artisan:make migration时出现NunoMaduro/Collision致命错误
我之前也碰到过一模一样的问题,这完全是nunomaduro/collision包和你的Laravel环境依赖不匹配导致的。先把你遇到的错误贴出来更清晰:
PHP Fatal error: Declaration of NunoMaduro\Collision\Writer::write(Whoops\Exception\Inspector $inspector): NunoMaduro\Collision\void must be compatible with NunoMaduro\Collision\Contracts\Writer::write(Whoops\Exception\Inspector $inspector): NunoMaduro\Collision\Contracts\void in /home/gregory/folbet/vendor/nunomaduro/collision/src/Writer.php on line 27
Symfony\Component\Debug\Exception\FatalErrorException : Declaration of N...
错误原因
这个错误本质是接口定义的返回类型和实现类的返回类型不兼容,通常是因为你更新依赖时,collision包的版本和Laravel框架、Whoops包的版本出现了冲突,导致代码层面的类型声明不匹配。
一步步解决方法
第一步:清理现有依赖缓存和冲突文件
先删掉vendor目录和composer.lock,避免旧版本依赖干扰:rm -rf vendor composer.lock第二步:重新适配并安装正确的Collision版本
根据你的Laravel版本选择对应的Collision版本(比如Laravel 8用5.x,Laravel 9用6.x,Laravel 10+用7.x及以上),直接让Composer自动处理适配:composer require nunomaduro/collision --update-with-dependencies第三步:重新安装所有依赖
执行下面的命令完成依赖安装:composer install(可选)如果还报错,更新Whoops包
因为错误里提到了Whoops的Inspector类,可能是Whoops版本也不兼容,执行:composer require filp/whoops --update-with-dependencies
小提醒
另外注意下,你执行的命令格式有点小问题,正确的迁移生成命令是php artisan make:migration create_your_table_name_table,不是php artisan:make migration,不过这个格式错误不是导致这次致命错误的原因,纠正后避免后续其他问题~
内容的提问来源于stack exchange,提问作者user6225298




