【问题标题】:Is it possible to set the .env values file dynamically from database in Laravel?是否可以从 Laravel 的数据库中动态设置 .env 值文件?
【发布时间】:2020-07-26 12:07:34
【问题描述】:

我正在编写一个新的 Laravel 应用程序,并且我想在从刀片视图安装项目时设置 env 值,即数据库详细信息、邮件程序详细信息、常规配置。 是否可以将这些变量存储在数据库中,然后将它们传递给 .env 文件?

【问题讨论】:

    标签: laravel environment-variables


    【解决方案1】:

    .env 文件是静态的,包含静态数据(如 DB 用户和密码)以加载动态配置。

    如果您想要动态配置,您可以通过服务提供商在应用启动时加载它们。

    【讨论】:

      【解决方案2】:

      您可以使用配置函数更改环境变量的值。 https://laravel.com/docs/7.x/configuration#accessing-configuration-values

      config(['app.timezone' => 'America/Chicago']);

      同样,您可以为其他配置执行此操作。

      【讨论】:

        【解决方案3】:

        如果您真的想更改 .env 文件的内容,则必须结合 PHP 的文件写入方法使用某种字符串替换。要获得一些灵感,您应该看一下 key:generate 命令:KeyGenerateCommand.php:

        $path = base_path('.env');
        
        if (file_exists($path)) {
            file_put_contents($path, str_replace(
                'APP_KEY='.$this->laravel['config']['app.key'], 'APP_KEY='.$key, file_get_contents($path)
            ));
        }
        

        在构建文件路径并检查是否存在后,该命令只需将 APP_KEY=[current app key] 替换为 APP_KEY=[new app key]。您应该能够用其他变量进行相同的字符串替换。 最后但并非最不重要的一点是,我只想说让用户更改 .env 文件可能不是最好的主意。对于大多数自定义设置,我建议将它们存储在数据库中,但是如果设置本身是连接数据库所必需的,这显然是一个问题。

        【讨论】:

        • 实际上我正在寻找一个安装程序 .. 就像我们使用 wordpress 获得一个安装程序一样,它获取数据库信息并在开始时创建一个超级管理员用户。对此有什么想法吗?
        • 是的,你可以做到。在首先执行的 index.php/file 中,编写这样一个脚本,一旦提交动态创建 .env 文件,该脚本就会从用户那里获取输入。希望这会有意义
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-25
        • 2020-09-24
        • 2018-05-15
        • 2017-12-05
        • 2015-06-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多