如何将指定的磁盘传递给Laravel中FilesystemAdapter上的宏?

6qqygrtg  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(115)

我想在Laravel中创建一个返回给定Storage::disk的CDN URL的宏。在宏中,我想访问指定的磁盘并返回该给定磁盘的CDN URL。下面是宏的代码:

<?php

namespace App\Providers;

use Illuminate\Filesystem\FilesystemAdapter;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\ServiceProvider;

class StorageMacroServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        if (!function_exists('cdnUrl'))
        {
            FilesystemAdapter::macro('cdnUrl', function ($filename) {
                $diskName = $this->getDriver();
                dd($diskName);
                return Storage::disk($diskName)->url($filename);
            });
        }
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

这是我调用宏的方式:

Storage::disk('local')->cdnUrl('test');

当我将Storage::disk('local')更改为Storage::disk('public')时,$diskName也会相应更改。但是,我无法访问给定驱动程序的磁盘名称。
我知道$diskName是一个League\Flysystem\Filesystem对象,但我希望能够访问Storage::disk('local')->cdnUrl('test')中指定的名称

wfsdck30

wfsdck301#

**Storage::disk()**的参数是帮助确定返回什么类型的适配器示例。

本地盘默认驱动为local

'local' => [
     'driver' => 'local',
     'root' => storage_path('app'),
     'throw' => false,
 ],

对于本地驱动,Storage::disk('local ')会返回一个FilesystemAdapter的示例,所以FilesystemAdapter::macro中不需要知道磁盘名称,只需要:

FilesystemAdapter::macro('cdnUrl', function ($filename) {   
     return $this->url($filename);
});

相关问题