You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9使用maatwebsite/excel报错:Call to undefined method Application::share()

Laravel执行Maatwebsite/Excel配置发布命令时报错:Call to undefined method Illuminate\Foundation\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()或新的绑定语法,因此出现兼容错误。

修复步骤

  1. 卸载旧版本:
    composer remove maatwebsite/excel
    
  2. 安装适配Laravel 9的版本:
    composer require maatwebsite/excel:^3.1
    

    3.1及以上版本完全支持Laravel 9,同时也兼容更高版本的Laravel。

  3. 重新发布配置文件:
    php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config
    

    注意:确保命令中的破折号是英文半角的--,而非你之前使用的中文全角符号,否则会导致命令解析失败。

内容的提问来源于stack exchange,提问作者Ridho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:30:46