stechstudio / laravel-vfs-adapter
Laravel 虚拟文件系统存储适配器
v3.1.0
2020-03-10 12:49 UTC
Requires
- php: >=7.0.0
- illuminate/support: ^5.1 || ^6.0 || ^7.0
- league/flysystem: ^1.0
- mikey179/vfsstream: ^1.6
Requires (Dev)
- ext-fileinfo: *
- mockery/mockery: ~1.0
- phpspec/phpspec: ^2.2
- phpunit/phpunit: ~6.0
- symfony/var-dumper: ^3
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
设置。当然,如果你想在其他环境中使用虚拟文件系统适配器,或者你不喜欢我们的做法,你也可以以更传统的方式注册提供者。
配置
所有配置都可以在 .env
、phpunit.xml
和 config/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"/>
这就完成了,那些驱动程序现在将使用虚拟文件系统适配器。