Sér*_*eis 5 laravel laravel-facade laravel-storage
我知道使用filesystems.php创建磁盘,目前正在使用它,配置了约20个磁盘。
我对此有一个新问题,我目前正在尝试为每个磁盘加上一个字符串前缀。问题是,在php artisan config:cache运行时会保存路径,但是我需要在运行时更改它们,例如n,对于User,Sergio它需要附加Sergio/到以下磁盘上:
//filesystems.php
'random' => [
'driver' => 'local',
'root' => storage_path('app/random'),
],
Run Code Online (Sandbox Code Playgroud)
然后
Storage::disk("random")->getDriver()->getAdapter()->getPathPrefix();
//outputs /var/www/html/project/storage/app/random
Run Code Online (Sandbox Code Playgroud)
并且目标是在中间件中设置配置,例如,我目前正在像这样设置帐篷数据库
//Middleware
Config::set('database.connections.tenant.database', "Sergio");
DB::reconnect('tenant');
Run Code Online (Sandbox Code Playgroud)
我目前可以正确设置路径
Config::set('filesystems.disks.random.root',storage_path('app/Sergio/random'));
Run Code Online (Sandbox Code Playgroud)
但是我担心,因为如果在该行之前我尝试到达该路径,那么存储将初始路径保存在内存中,而不是在更改后重新获取它。
例如。无需任何中间件就能做到这一点。
$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();
Run Code Online (Sandbox Code Playgroud)
打算发生的事情是$fullPath1将输出初始路径,/var/www/html/project/storage/app/random然后$fullPath2将其输出/var/www/html/project/storage/app/Sergio/random
有什么方法可以让Storage知道我已经更改了磁盘的本地路径?
添加一个新的配置而不是更新已加载的配置怎么样,如下所示:
private function addNewDisk(string $diskName)
{
config(['filesystems.disk.' . $diskName => [
'driver' => 'local',
'root' => storage_path('app/' . $diskName),
]]);
}
Run Code Online (Sandbox Code Playgroud)
在使用存储外观之前,调用上面的方法,这样配置将被更新,当您使用新磁盘时,它将尝试根据更新的配置再次解析。
{
....
$this->addNewDisk('new_random');
Storage::disk('new_random')->get('abc.txt'); // or any another method
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
716 次 |
| 最近记录: |