拉拉维尔动态配置设置

2022-08-30 13:37:00

我正在我的项目中使用一个包,它在里面存储了一个设置。config/packagename

我想在配置文件中动态更改此值,这就是文件结构当前的外观;

<?php

return [
    'view_id' => '118754561',

    'cache_lifetime_in_minutes' => 60 * 24,
];

我想把它改成这样 -

'view_id' => Auth::user()->id,

您可以在配置文件中执行此操作,还是必须存储某种变量以便稍后在控制器中更新。有没有办法将这些变量放在 env 文件中,并从控制器访问这些新变量?


答案 1

这也是动态更新 .env 文件(分别为各个键/值对)的通用解决方案

  1. 更改配置/包名称中的设置,如下所示:
return [
    'view_id' => env('VIEW_ID', '118754561'),
    etc...
]
  1. 将初始值添加到 .env 中:

    VIEW_ID=118754561

  2. 在适当的控制器(例如AuthController)中,使用以下代码并调用如下函数:updateDotEnv('VIEW_ID',Auth::User()->id)

    protected function updateDotEnv($key, $newValue, $delim='')
    {
    
        $path = base_path('.env');
        // get old value from current env
        $oldValue = env($key);
    
        // was there any change?
        if ($oldValue === $newValue) {
            return;
        }
    
        // rewrite file content with changed data
        if (file_exists($path)) {
            // replace current value with new value 
            file_put_contents(
                $path, str_replace(
                    $key.'='.$delim.$oldValue.$delim, 
                    $key.'='.$delim.$newValue.$delim, 
                    file_get_contents($path)
                )
            );
        }
    }
    

(如果要使此函数更通用,以便在 .env 中使用 key=value 对,其中值必须括在双引号中,因为它们包含空格,因此需要 $delim 参数)。

诚然,如果您有多个用户同时在项目中使用此包,这可能不是一个好的解决方案。因此,这取决于您使用此软件包的目的。

NB:当然,如果你打算从其他类中使用它,你需要公开这个函数。


答案 2

Laravel框架的所有配置文件都存储在目录中。app/config

因此,如果我们需要创建自定义配置值,最好在自定义文件中单独保留自定义配置。因此,我们需要在 中创建自定义文件。app/config directory

Laravel自动将此文件作为配置文件读取并将自动管理在本主题中,我们正在使用laravel中的自定义配置,并在控制器或视图中获取配置值。

现在,我将解释如何在Laravel中创建一个自定义配置文件,以便我们可以实现动态功能。

创建一个具有配置键和值的文件,例如:-app/config/custom.php

return array(
  'my_val' => 'mysinglelue',
  'my_arr_val' => array('1', '2', '3'),
);

现在需要在视图/控制器中获取这些配置值,因此我们将为此使用Config类方法get()

语法:

echo Config::get('filename.arraykey');

其中 是 ,在我们的例子中是 自定义,key 是您要访问的值。filenameconfig file’s namearray key

在我们的例子中,它将是:

echo Config::get('custom.my_val');

在 laravel 中创建运行时配置:-

在运行时设置的配置值将为当前请求设置,而不是传递到后续请求。

您可以将动态值传递到此处,以便可以使用函数在此处动态修改配置文件。isset()

就像@Kundan罗伊如何建议使用 isset() 一样,相同的条件也适用于这里。但是这个是替代方法,适用于配置中值的动态设置。

Config::set('custom.my_val', 'mysinglelue');

因此,通过使用此方法,您可以根据所需的值创建动态配置文件。


推荐