【问题标题】:Laravel Dynamic Filesystem Configuration Set in Controller Level控制器级别的 Laravel 动态文件系统配置集
【发布时间】:2022-10-06 00:05:04
【问题描述】:

我试图在控制器级别动态设置文件系统配置值。 (我认为这几乎是不可能的)。

例如:

    \'sftp\' => [
        \'driver\' => \'sftp\',
        \'host\' => env(\'SFTP_HOST\'),
        \'port\' => intval(env(\'SFTP_PORT\')),
        \'username\' => env(\'SFTP_USERNAME\'),
        \'password\' => env(\'SFTP_PASSWORD\'),
    ],

这是我在filesystems.php 中的 SFTP 磁盘配置值。

我将从数据库表中动态获得host, port, username, password 值。 (会有多条记录。)

我正在尝试使用文件管理器包连接文件系统。 (即:https://github.com/alexusmai/laravel-file-manager)

当我使用静态值时,它运行良好。

现在我试图在控制器级别动态设置它。

$myConfigArrayvalue = MyModel::find($id);
config([\'filesystems.disk.sftp\' => $myConfigArrayvalue);

当我在控制器或视图中dd(config(\'filesystems.disk.sftp\')) 时,它会动态显示值。

但是在文件管理器包(服务提供者)中,它显示为空值,所以当我去查看页面时,它不起作用。

我认为这是因为在 Controller 之前调用了 ServiceProvider。

谁能帮助我如何做到这一点?

  • 您在什么控制器中设置这些配置值?

标签: php laravel laravel-filesystem laravel-service-container laravel-config


【解决方案1】:

您可以使用Illuminate\Filesystem\FilesystemManager 动态创建 sftp 连接。

这是我的做法:

            $config = 'sftp' => [
    'driver' => 'sftp',
    'host' => env('SFTP_HOST'),
    'port' => intval(env('SFTP_PORT')),
    'username' => env('SFTP_USERNAME'),
    'password' => env('SFTP_PASSWORD'),
]
            $fsMgr = new FilesystemManager(app());
            $sftpDisk = $fsMgr->createSftpDriver($configArr);
            $sftpDisk->put($fileName, $fullTxt);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 2013-10-04
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多