piotr-grabowski-elastique/laravel-vfs-适配器

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

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

This package is auto-updated.

Last update: 2024-09-29 06:08:36 UTC


README

有时候,在测试过程中,如果我们能够轻松地将各种 Storage:disk() 调用替换为虚拟文件系统(如 mikey179/vfsStream),那将会非常方便。

安装

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"/>

就是这样,这些驱动程序现在将使用虚拟文件系统适配器。