Laravel在运行时更改文件系统磁盘路径

时间:2018-03-21 22:44:32

标签: laravel laravel-facade laravel-storage

我知道要创建磁盘的filesystems.php,我正在使用它,配置了~~20个磁盘。

我有一个新问题,我正在尝试为每个磁盘添加前缀,一个字符串。问题是在php artisan config:cache运行时保存了路径但我需要在运行时更改它们,例如,对于用户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

有没有办法让存储知道我已经更改了磁盘本地路径?

1 个答案:

答案 0 :(得分:0)

添加新配置而不是更新已加载的配置如何?

private function addNewDisk(string $diskName) 
{
      config(['filesystems.disk.' . $diskName => [
          'driver' => 'local',
          'root' => storage_path('app/' . $diskName),
      ]]);
}

并且在使用Storage Facade之前,请调用上述方法,以这种方式更新配置,并且当您使用新磁盘时,它将尝试根据更新的配置再次进行解析。

{
....
    $this->addNewDisk('new_random');
    Storage::disk('new_random')->get('abc.txt'); // or any another method
...

}