执行Laravel artisan命令时遇Call to undefined method异常求助
Laravel启动异常:Call to undefined method Illuminate\Support\Collection::mapWithKeys()
项目搭建完成后,执行artisan serve启动本地Laravel服务器时触发异常,报错信息如下:
In PackageManifest.php line 130: Call to undefined method Illuminate\Support\Collection::mapWithKeys()
补充日志信息(UPD)
laravel.log日志内容:
[2022-12-31 10:46:59] laravel.EMERGENCY: Unable to create configured logger. Using emergency logger. {"exception":"[object] (Error(code: 0): Call to undefined method Illuminate\\Support\\Collection::flatMap() at vendor/laravel/framework/src/Illuminate/Log/LogManager.php:252) [stacktrace] #0 vendor/laravel/framework/src/Illuminate/Log/LogManager.php(210): Illuminate\Log\LogManager->createStackDriver() #1 vendor/laravel/framework/src/Illuminate/Log/LogManager.php(125): Illuminate\Log\LogManager->resolve() #2 vendor/laravel/framework/src/Illuminate/Log/LogManager.php(112): Illuminate\Log\LogManager->get() #3 vendor/laravel/framework/src/Illuminate/Log/LogManager.php(590): Illuminate\Log\LogManager->driver() #4 vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(252): Illuminate\Log\LogManager->error() #5 app/Exceptions/Handler.php(53): Illuminate\Foundation\Exceptions\Handler->report() #6 vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(366): App\Exceptions\Handler->report() #7 vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(131): Illuminate\Foundation\Console\Kernel->reportException() #8 artisan(35): Illuminate\Foundation\Console\Kernel->handle() #9 {main} "} [2022-12-31 10:46:59] laravel.ERROR: Call to undefined method Illuminate\Support\Collection::mapWithKeys() {"exception":"[object] (Error(code: 0): Call to undefined method Illuminate\\Support\\Collection::mapWithKeys() at vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php:130) [stacktrace] #0 vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php(106): Illuminate\Foundation\PackageManifest->build() #1 vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php(89): Illuminate\Foundation\PackageManifest->getManifest() #2 vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php(78): Illuminate\Foundation\PackageManifest->config() #3 vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/RegisterFacades.php(26): Illuminate\Foundation\PackageManifest->aliases() #4 vendor/laravel/framework/src/Illuminate/Foundation/Application.php(237): Illuminate\Foundation\Bootstrap\RegisterFacades->bootstrap() #5 vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(310): Illuminate\Foundation\Application->bootstrapWith() #6 vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(127): Illuminate\Foundation\Console\Kernel->bootstrap() #7 artisan(35): Illuminate\Foundation\Console\Kernel->handle() #8 {main} "}
相关代码片段
PackageManifest.php中触发错误的代码片段:
$this->write(collect($packages)->mapWithKeys(function ($package) { return [$this->format($package['name']) => $package['extra']['laravel'] ?? []]; })->each(function ($configuration) use (&$ignore) { $ignore = array_merge($ignore, $configuration['dont-discover'] ?? []); })->reject(function ($configuration, $package) use ($ignore, $ignoreAll) { return $ignoreAll || in_array($package, $ignore); })->filter()->all());
解决方案
问题原因
mapWithKeys()和flatMap()是Illuminate\Support 5.4版本之后新增的Collection方法,出现该错误说明Laravel框架版本与依赖的Illuminate组件版本不匹配,大概率是依赖安装时版本不一致,或是框架版本过低导致的。
解决步骤
- 删除项目根目录下的
vendor文件夹和composer.lock文件 - 执行
composer install重新安装所有依赖,Composer会自动根据Laravel版本拉取兼容的组件版本 - 若重新安装后仍报错,检查
composer.json中的Laravel版本号,确认其对应的Illuminate组件版本要求,避免手动修改组件版本引发冲突 - 如果是手动升级Laravel框架导致的问题,需确保所有核心组件同步升级,不要只升级部分包
内容的提问来源于stack exchange,提问作者Max Slyusarchuk
相关产品推荐
相关产品推荐

