我正在实现一个电子邮件处理系统,我想将原始电子邮件及其所有附件保存到路径中。例如 - 邮件数据/123456/5
其中 123456 是父 ID,5 是子 ID。
在 filesystems.php 我创建了一个名为mail-data
'mail-data' => [
'driver' => 'local',
'root' => storage_path('app/public/mail-data'),
'visibility' => 'private',
],
就为存储路径、可见性等设置前缀而言,这非常有用。但是,我想要做的是在每个模型的基础上,调用存储属性并将邮件数据驱动程序集返回到确切的位置小路。这样,我的所有逻辑都可以简单地是:
$model->storage->put($file->getFilename(), $file->stream());
而不是:
$path = Storage::disk('mail-data')->put($model->parent_id . '/' . $model->id . '/' . $file->getFilename(), $file->getStream())
我认为最好的方法是在模型上创建一个访问器,并且我已经能够更新适配器,我只是不知道如何在 Filesystem 实例上更新它并返回它?
public function getStorageAttribute()
{
$storage = Storage::disk('mail-data');
$adapter = $storage->getAdapter();
$adapter->setPathPrefix($adapter->getPathPrefix() . $this->parent_id . '/' . $this->id);
// what to do here to return our modified storage instance?
}