stechstudio/laravel-vfs-adapter

Laravel 虚拟文件系统存储适配器

v3.1.0 2020-03-10 12:49 UTC

This package is auto-updated.

Last update: 2024-09-10 22:53:33 UTC


README

有时候,当我们进行测试时,如果能轻松地用虚拟文件系统(如 mikey179/vfsStream)替换掉各种 Storage:disk() 调用,那将是非常棒的。

安装

composer require stechstudio/laravel-vfs-adapter

然后在你的 App\Providers\AppServiceProvider 中注册提供者,如下所示

public function register()
{
    if ($this->app->environment() === 'testing') {
        if (class_exists(VfsFilesystemServiceProvider::class)) {
            $this->app->register(VfsFilesystemServiceProvider::class);
        }
    }
}

这假设你使用 Laravel 默认的 APP_ENV=testing 设置。当然,如果你想在其他环境中使用虚拟文件系统适配器,或者你不喜欢我们的做法,你也可以以更传统的方式注册提供者。

配置

所有配置都可以在 .envphpunit.xmlconfig/filesystems.php 的组合中完成。

假设你的 config/filesystems.php 看起来像这样

return [
    ....

    'disks' => [
        'data' => [
            'driver' => 'local',
            'root'   => env('STORAGE_DATA_DIR'),
        ],

        'archive' => [
            'driver'   => 's3'
            'key'      => env('S3_KEY'),
            'secret'   => env('S3_SECRET'),
            'region'   => env('S3_REGION'),
            'bucket'   => env('S3_DEVELOP_BUCKET')
        ]
    ],
];

只需进行一些修改

return [
    ....

    'disks' => [

        'data' => [
            'driver' => env('STORAGE_DATA_DRIVER', 'local'),
            'root'   => env('STORAGE_DATA_DIR'),
            'dir_name' => 'data'
        ],

        'archive' => [
            'driver'   => env('S3_ARCHIVE_DRIVER', 's3')
            'key'      => env('S3_KEY'),
            'secret'   => env('S3_SECRET'),
            'region'   => env('S3_REGION'),
            'bucket'   => env('S3_DEVELOP_BUCKET'),
            'dir_name' => 'archive'
        ]
    ],
];

dir_name 决定了特定 Storage::disk() 的 vfsStream 的根目录,我喜欢将其命名为与实际 disk 名称相关的名称。使用 env() 设置驱动程序允许我们默认使用标准驱动程序,或者允许我们在 phpunit.xml 中覆盖它,以切换到虚拟文件系统驱动程序。

现在,在你的 phpunit.xml 中添加

<env name="STORAGE_DATA_DRIVER" value="vfs"/>
<env name="S3_ARCHIVE_DRIVER" value="vfs"/>

这就完成了,那些驱动程序现在将使用虚拟文件系统适配器。