Laravel 10安装maatwebsite/excel遇PSR-0自动加载兼容错误求助
解决Laravel中安装Laravel Excel的PSR-0自动加载错误
问题重现
执行安装命令:
composer require maatwebsite/excel
安装过程中出现一系列PSR-0自动加载合规性错误:
> Class PHPExcel_Properties located in > D:/project/real/laravel/testexcel/vendor/phpoffice/phpexcel/Classes\PHPExcel\Chart\Properties.php > does not comply with psr-0 autoloading standard. Skipping. Class > PHPExcel_Best_Fit located in > D:/project/real/laravel/testexcel/vendor/phpoffice/phpexcel/Classes\PHPExcel\Shared\trend\bestFitClass.php > does not comply with psr-0 autoloading standard. Skipping. Class > PHPExcel_Exponential_Best_Fit located in > D:/project/real/laravel/testexcel/vendor/phpoffice/phpexcel/Classes\PHPExcel\Shared\trend\exponentialBestFitClass.php > does not comply with psr-0 autoloading standard. Skipping. Class > PHPExcel_Linear_Best_Fit located in > D:/project/real/laravel/testexcel/vendor/phpoffice/phpexcel/Classes\PHPExcel\Shared\trend\linearBestFitClass.php > does not comply with psr-0 autoloading standard. Skipping. Class > PHPExcel_Logarithmic_Best_Fit located in > D:/project/real/laravel/testexcel/vendor/phpoffice/phpexcel/Classes\PHPExcel\Shared\trend\logarithmicBestFitClass.php > does not comply with psr-0 autoloading standard. Skipping. Class > PHPExcel_Polynomial_Best_Fit located in > D:/project/real/laravel/testexcel/vendor/phpoffice/phpexcel/Classes\PHPExcel\Shared\trend\polynomialBestFitClass.php > does not comply with psr-0 autoloading standard. Skipping. Class > PHPExcel_Power_Best_Fit located in > D:/project/real/laravel/testexcel/vendor/phpoffice/phpexcel/Classes\PHPExcel\Shared\trend\powerBestFitClass.php > does not comply with psr-0 autoloading standard. Skipping.
环境:PHP 8.1,当前composer.json配置:
{ "name": "laravel/laravel", "type": "project", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "require": { "php": "^8.1", "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^9.19", "laravel/sanctum": "^3.0", "laravel/tinker": "^2.7", "maatwebsite/excel": "^1.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": "stable", "prefer-stable": true }
错误原因
你的composer.json中指定安装的是maatwebsite/excel ^1.1,这是一个多年前的老旧版本:
- 该版本依赖已废弃的
phpoffice/phpexcel库,此库停止维护超过7年,完全不兼容PHP 8.1的语法和现代自动加载规范(PSR-4) - PHPExcel的类文件命名和路径不符合PSR-0标准,导致Composer无法正确完成自动加载
解决方案
1. 卸载旧版本
执行命令移除老旧的Laravel Excel版本:
composer remove maatwebsite/excel
2. 安装兼容版本
直接执行安装命令,Composer会自动匹配当前Laravel(9.x/10.x)和PHP 8.1的最新稳定版(当前为3.x系列,基于维护中的phpoffice/phpspreadsheet):
composer require maatwebsite/excel
3. 验证安装(可选)
发布Laravel Excel的配置文件到项目中:
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
补充说明
- Laravel Excel 3.x是完全重写的版本,替换了废弃的PHPExcel为PhpSpreadsheet,支持PHP 7.4+和Laravel 6.x+
- 3.x版本的API与1.x不兼容,若需迁移旧代码,需调整逻辑适配新API
内容的提问来源于stack exchange,提问作者Richard Kyle
相关产品推荐
相关产品推荐

