问题:如何在我的代码中注入磁盘(构造函数或控制器方法)?
相关: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');
看起来像是一个“硬编码”。我可能有不同的服务类,如SendImageOnEmail
,OptimizeImage
和磁盘实例,它是基础设施依赖。对我而言似乎应该通过构造函数注入。
答案 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();