Я внедряю систему обработки электронной почты, в которой я хочу сохранить исходную электронную почту и все ее вложения в путь. Например - mail-data / 123456/5
Где 123456 - идентификатор родителя, а 5 - идентификатор ребенка.
В 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())
Я думаю, что лучший способ сделать это - создать аксессор на модели, и я смог обновить адаптер, я просто не знаю, как обновить это на экземпляре файловой системы и вернуть его?
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?
}