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

Laravel 11升级后报错:Undefined array key 'driver' 求解决方案

Laravel 11升级后运行php artisan报"Undefined array key 'driver'"错误解决办法

问题现象

运行php artisan时触发以下错误:

Undefined array key "driver"

at vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php:117
113▕ * @return bool
114▕ /
115▕ protected function shouldServeFiles(array $config)
116▕ {
➜ 117▕ return $config['driver'] === 'local' && ($config['serve'] ?? false);
118▕ }
119▕
120▕ /
*
121▕ * Get the default file driver.

调试过程

查看报错对应的函数:

/**
 * Determine if the disk is serveable.
 *
 * @param  array  $config
 * @return bool
 */
protected function shouldServeFiles(array $config)
{
    return $config['driver'] === 'local' && ($config['serve'] ?? false);
}

打印传入该函数的$config数组:

array:3 [
  "driver" => "local"
  "root" => "/var/www/html/storage/app"
  "throw" => false
]

用dd()输出条件判断结果,返回false:

dd($config['driver'] === 'local' && ($config['serve'] ?? false));

临时修改vendor文件让该函数返回false可正常运行,但这不是规范解决方案。

相关配置

当前filesystems.php中的s3配置采用嵌套结构:

's3' => [
    'blog' => [
        'driver' => 's3',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION'),
        'bucket' => 'blog',
        'url' => env('AWS_URL').'/blog',
        'endpoint' => env('AWS_ENDPOINT'),
        'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', true),
        'throw' => true,
    ],
    'verifications' => [
        'driver' => 's3',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION'),
        'bucket' => 'verifications',
        'url' => env('AWS_URL').'/verifications',
        'endpoint' => env('AWS_ENDPOINT'),
        'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', true),
        'throw' => true,
    ],
    // 其他s3子配置省略...
],

解决办法

问题根源是Laravel 11不支持将多个s3磁盘嵌套在s3父节点下,正确的做法是将每个s3子磁盘配置直接平级放在disks数组中:

修改filesystems.php的disks部分:

'disks' => [
    // 保留原有local、public等磁盘配置...
    
    'blog' => [
        'driver' => 's3',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION'),
        'bucket' => 'blog',
        'url' => env('AWS_URL').'/blog',
        'endpoint' => env('AWS_ENDPOINT'),
        'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', true),
        'throw' => true,
    ],
    'verifications' => [
        'driver' => 's3',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION'),
        'bucket' => 'verifications',
        'url' => env('AWS_URL').'/verifications',
        'endpoint' => env('AWS_ENDPOINT'),
        'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', true),
        'throw' => true,
    ],
    // 其他原s3下的子磁盘配置依次平级移出...
],

修改完成后,Laravel可正确识别每个磁盘的driver配置,错误即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:45:55