我知道文件系统.php来创建磁盘,我目前正在使用它,配置了~~20个磁盘。
我对这些有一个新的问题,我目前正在尝试为每个磁盘添加前缀,一个字符串。问题是在运行php artisan config:cache
时保存了路径,但我需要在运行时更改它们,例如 n 个,对于用户Sergio
它需要将Sergio/
附加到以下磁盘例如:
//filesystems.php
'random' => [
'driver' => 'local',
'root' => storage_path('app/random'),
],
然后
Storage::disk("random")->getDriver()->getAdapter()->getPathPrefix();
//outputs /var/www/html/project/storage/app/random
目标是在中间件中设置配置,例如我目前正在设置暂定数据库,已经像这样了
//Middleware
Config::set('database.connections.tenant.database', "Sergio");
DB::reconnect('tenant');
我目前可以使用以下方法正确设置路径
Config::set('filesystems.disks.random.root',storage_path('app/Sergio/random'));
但我担心,因为如果在我尝试到达该路径之前,存储会将初始路径保存在内存中,而不是在更改后重新获取它。
例如,在没有任何中间件的情况下执行此操作。
$fullPath1 = Storage::disk("random")->getDriver()->getAdapter()->getPathPrefix();
Config::set('filesystems.disks.random.root',storage_path('app/Sergio/random'));
$fullPath2 = Storage::disk("random")->getDriver()->getAdapter()->getPathPrefix();
打算发生的是,$fullPath1
将输出/var/www/html/project/storage/app/random
的初始路径,然后$fullPath2
将输出/var/www/html/project/storage/app/Sergio/random
有什么方法可以让存储知道我已更改磁盘本地路径?
如何添加新的配置而不是更新已加载的配置,如下所示:
private function addNewDisk(string $diskName)
{
config(['filesystems.disk.' . $diskName => [
'driver' => 'local',
'root' => storage_path('app/' . $diskName),
]]);
}
在使用存储外观之前,调用上述方法,以便更新配置,当您使用新磁盘时,它将尝试根据更新的配置再次解析。
{
....
$this->addNewDisk('new_random');
Storage::disk('new_random')->get('abc.txt'); // or any another method
...
}