Composer 1.x安装Laravel认证组件遇array_merge参数错误,需升级?
问题:Laravel认证安装失败与Composer版本疑问
背景
我正尝试为Laravel应用添加认证功能,由于make:auth已被废弃,先后尝试了ui:auth与Breeze两种方案。当前Composer版本为1.10.1(命令行安装时自带),最新版本是2.5.1,想问是否必须升级Composer?
执行命令与错误信息
执行以下两条命令均报错:
composer require laravel/breeze:1.9.2composer require laravel/ui
错误信息:
Warning from https://repo.packagist.org: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2. See https://blog.packagist.com/deprecating-composer-1-support/ Info from https://repo.packagist.org: #StandWithUkraine Using version ^4.1 for laravel/ui ./composer.json has been updated PHP Fatal error: Uncaught ArgumentCountError: array_merge() does not accept unknown named parameters in /usr/share/php/Composer/DependencyResolver/DefaultPolicy.php:84 Stack trace: #0 [internal function]: array_merge() #1 /usr/share/php/Composer/DependencyResolver/DefaultPolicy.php(84): call_user_func_array() #2 /usr/share/php/Composer/DependencyResolver/Solver.php(387): Composer\DependencyResolver\DefaultPolicy->selectPreferredPackages() #3 /usr/share/php/Composer/DependencyResolver/Solver.php(740): Composer\DependencyResolver\Solver->selectAndInstall() #4 /usr/share/php/Composer/DependencyResolver/Solver.php(231): Composer\DependencyResolver\Solver->runSat() #5 /usr/share/php/Composer/Installer.php(489): Composer\DependencyResolver\Solver->solve() #6 /usr/share/php/Composer/Installer.php(232): Composer\Installer->doInstall() #7 /usr/share/php/Composer/Command/RequireCommand.php(248): Composer\Installer->run() #8 /usr/share/php/Composer/Command/RequireCommand.php(205): Composer\Command\RequireCommand->doUpdate() #9 /usr/share/php/Symfony/Component/Console/Command/Command.php(255): Composer\Command\RequireCommand->execute() #10 /usr/share/php/Symfony/Component/Console/Application.php(934): Symfony\Component\Console\Command\Command->run() #11 /usr/share/php/Symfony/Component/Console/Application.php(273): Symfony\Component\Console\Application->doRunCommand() #12 /usr/share/php/Composer/Console/Application.php(281): Symfony\Component\Console\Application->doRun() #13 /usr/share/php/Symfony/Component/Console/Application.php(149): Composer\Console\Application->doRun() #14 /usr/share/php/Composer/Console/Application.php(113): Composer\Console\Application->run() #15 /usr/bin/composer(62): Composer\Console\Application->run() #16 {main} thrown in /usr/share/php/Composer/DependencyResolver/DefaultPolicy.php on line 84 Fatal error: Uncaught ArgumentCountError: array_merge() does not accept unknown named parameters in /usr/share/php/Composer/DependencyResolver/DefaultPolicy.php:84 Stack trace: #0 [internal function]: array_merge() #1 /usr/share/php/Composer/DependencyResolver/DefaultPolicy.php(84): call_user_func_array() #2 /usr/share/php/Composer/DependencyResolver/Solver.php(387): Composer\DependencyResolver\DefaultPolicy->selectPreferredPackages() #3 /usr/share/php/Composer/DependencyResolver/Solver.php(740): Composer\DependencyResolver\Solver->selectAndInstall() #4 /usr/share/php/Composer/DependencyResolver/Solver.php(231): Composer\DependencyResolver\Solver->runSat() #5 /usr/share/php/Composer/Installer.php(489): Composer\DependencyResolver\Solver->solve() #6 /usr/share/php/Composer/Installer.php(232): Composer\Installer->doInstall() #7 /usr/share/php/Composer/Command/RequireCommand.php(248): Composer\Installer->run() #8 /usr/share/php/Composer/Command/RequireCommand.php(205): Composer\Command\RequireCommand->doUpdate() #9 /usr/share/php/Symfony/Component/Console/Command/Command.php(255): Composer\Command\RequireCommand->execute() #10 /usr/share/php/Symfony/Component/Console/Application.php(934): Symfony\Component\Console\Command\Command->run() #11 /usr/share/php/Symfony/Component/Console/Application.php(273): Symfony\Component\Console\Application->doRunCommand() #12 /usr/share/php/Composer/Console/Application.php(281): Symfony\Component\Console\Application->doRun() #13 /usr/share/php/Symfony/Component/Console/Application.php(149): Composer\Console\Application->doRun() #14 /usr/share/php/Composer/Console/Application.php(113): Composer\Console\Application->run() #15 /usr/bin/composer(62): Composer\Console\Application->run() #16 {main} thrown in /usr/share/php/Composer/DependencyResolver/DefaultPolicy.php on line 84
当前composer.json内容
{ "name": "laravel/laravel", "type": "project", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "require": { "php": "^8.0.2", "guzzlehttp/guzzle": "^7.2", "laravel/breeze": "1.9.2", "laravel/framework": "^9.19", "laravel/sanctum": "^3.0", "laravel/tinker": "^2.7", "laravel/ui": "^4.1" }, "require-dev": { "fakerphp/faker": "^1.9.1", "laravel/pint": "^1.0", "laravel/sail": "^1.0.1", "mockery/mockery": "^1.4.4", "nunomaduro/collision": "^6.1", "phpunit/phpunit": "^9.5.10", "spatie/laravel-ignition": "^1.0" }, "autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" } }, "autoload-dev": { "psr-4": { "Tests\\": "tests/" } }, "scripts": { "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover --ansi" ], "post-update-cmd": [ "@php artisan vendor:publish --tag=laravel-assets --ansi --force" ], "post-root-package-install": [ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ "@php artisan key:generate --ansi" ] }, "extra": { "laravel": { "dont-discover": [] } }, "config": { "optimize-autoloader": true, "preferred-install": "dist", "sort-packages": true, "allow-plugins": { "pestphp/pest-plugin": true } }, "minimum-stability": "dev", "prefer-stable": true }
解决方案
1. 必须升级Composer到2.x版本
错误根源是Composer 1.x与PHP 8.0+不兼容:PHP 8.0开始严格校验函数参数格式,而Composer 1.x的DefaultPolicy.php中使用了array_merge()不支持的命名参数调用方式,直接触发ArgumentCountError。
另外Packagist已明确停止对Composer 1.x的支持,Laravel 9+适配的laravel/breeze、laravel/ui等包也不再兼容旧版Composer,所以升级是必须的。
2. 升级Composer
执行全局升级命令:
composer self-update --2
Linux/macOS环境下如果权限不足,添加sudo:
sudo composer self-update --2
3. 重新安装认证包
先确保依赖正常:
composer install
然后根据需求选择一种方案:
- Laravel Breeze:
composer require laravel/breeze --dev php artisan breeze:install npm install && npm run build php artisan migrate - Laravel UI:
composer require laravel/ui php artisan ui bootstrap --auth # 可替换为react/vue npm install && npm run build php artisan migrate
内容的提问来源于stack exchange,提问作者user17159490
相关产品推荐
相关产品推荐

