我在我的项目中使用一个包,它在里面存储一个设置config/packagename
我想在配置文件中动态更改此值,这就是文件结构当前的样子;
<?php
return [
'view_id' => '118754561',
'cache_lifetime_in_minutes' => 60 * 24,
];
我想把它改成这样——
'view_id' => Auth::user()->id,
您可以在配置文件中执行此操作,还是必须存储某种变量以便稍后在控制器中更新。有没有办法将这些变量放在 env 文件中并从控制器访问这些新变量?
这也是一个动态更新 .env 文件的通用解决方案(各自的键/值对)
- 更改您的 config/packagename 中的设置,如下所示:
return [
'view_id' => env('VIEW_ID', '118754561'),
etc...
]
-
将初始值添加到 .env 中:
VIEW_ID=118754561
-
在适当的控制器(例如 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 参数,其中值必须用双引号引起来,因为它们包含空格)。
诚然,如果您的项目中有多个用户同时使用此包,这可能不是一个好的解决方案。所以这取决于你使用这个包的目的。
注意:如果您打算从其他类中使用该函数,当然您需要将该函数公开。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)