在Laravel中注入磁盘实例

时间:2017-05-04 07:11:48

标签: laravel flysystem

问题:如何在我的代码中注入磁盘(构造函数或控制器方法)?

相关:https://laravel.com/docs/5.4/filesystem#obtaining-disk-instances

我想做的是做

之类的事情
function __construct(Disk $disk)
{

}

而不是

function __construct(Disk $disk)
{
    $disk = Storage::disk('files');   
}

稍后编辑1:

在我的服务类或控制器中一直使用$disk = Storage::disk('files');看起来像是一个“硬编码”。我可能有不同的服务类,如SendImageOnEmailOptimizeImage和磁盘实例,它是基础设施依赖。对我而言似乎应该通过构造函数注入。

1 个答案:

答案 0 :(得分:2)

您可以创建一个返回Storage method的类,并将其注入要使用该方法的类的构造函数中。

我只为你的问题提供虚拟模型。你可以这样做:

Class StorageType 
{
    public function getStorage()
    {
        //do something that gets the storage type
        $storage = Storage::disk('files'); // you could manipulate your storage method and return to the class you are using.
        return $storage;
    }
}

在使用磁盘方法的控制器上:

public $storage;

function __construct(StorageType $storageType)
{
    $this->storage = $storageType;
}

现在,您可以从StorageType类动态获取存储,并使用以下方法在该类中使用:

$this->storage->getStorage();