1

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

相关: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并且磁盘实例是基础设施依赖项。对我来说,似乎应该通过构造函数注入。

4

1 回答 1

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();
于 2017-05-04T11:22:14.847 回答