Laravel 9使用maatwebsite/excel报错:Call to undefined method Application::share()
问题详情
我试图通过composer require maatwebsite/excel实现Excel导出功能,当前Laravel版本为9.19,我的composer.json配置如下:
{ "name": "laravel/laravel", "type": "project", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "require": { "php": "^8.0.2", "barryvdh/laravel-dompdf": "^2.0", "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^9.19", "laravel/sanctum": "^3.0", "laravel/tinker": "^2.7", "laravel/ui": "^4.0", "maatwebsite/excel": "*" }, "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 }
执行以下命令时:
php artisan vendor:publish –provider=”Maatwebsite\Excel\ExcelServiceProvider” –tag=config
出现错误:
Call to undefined method Illuminate\Foundation\Application::share() at vendor/maatwebsite/excel/src/Maatwebsite/Excel/ExcelServiceProvider.php:159 155▕ */ 156▕ protected function bindClasses() 157▕ { 158▕ // Bind the format identifier ➜ 159▕ $this->app['excel.identifier'] = $this->app->share(function($app) { 160▕ return new FormatIdentifier($app['files']); 161▕ }); 162▕ } 163▕ +8 vendor frames 9 artisan:37 Illuminate\Foundation\Console\Kernel::handle()
解决方案
核心原因
你安装的是旧版本的Maatwebsite/Excel(如2.x系列),该版本依赖Laravel 5.x中的share()方法,但Laravel 6及以上版本已经移除了这个方法,改用singleton()或新的绑定语法,因此出现兼容错误。
修复步骤
- 卸载旧版本:
composer remove maatwebsite/excel - 安装适配Laravel 9的版本:
composer require maatwebsite/excel:^3.13.1及以上版本完全支持Laravel 9,同时也兼容更高版本的Laravel。
- 重新发布配置文件:
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config注意:确保命令中的破折号是英文半角的
--,而非你之前使用的中文全角符号,否则会导致命令解析失败。
内容的提问来源于stack exchange,提问作者Ridho
相关产品推荐
相关产品推荐

