我正在做一个自定义的cms,我希望管理员用户能够修改一些变量从图形用户界面(管理设置)如邮件变量。所以他们可以很容易地改变一些值在环境文件中使用提供的更新形式。
我在自己创建的帮助器文件中创建了一个自定义函数,并向其中添加了以下代码
function changeEnv($key, $value)
{
$path = base_path('.env');
if (file_exists($path)) {
file_put_contents($path, str_replace(
$key . '=' . env($key), $key . '=' . $value, file_get_contents($path)
));
}
}
然后在我的控制器里我有下面的代码
public function updateEmail(Request $request)
{
foreach ($request->types as $key => $type) {
// echo $type . "=" . $request[$type];
changeEnv($type, $request[$type]);
}
}
现在,当我点击更新按钮时,只有带有NULL的viriables得到更新,而不是完全更新,我将得到类似MAIL_PORT=465null
的内容。在此之后,除非我手动将其更改为null,否则它们将不再更新。
我的env变量看起来像下面更新前:
MAIL_MAILER=mail
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
更新后,我会得到:
MAIL_MAILER=mail
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=sslnull
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
我将感谢任何帮助,就如何使这一工作完美。
1条答案
按热度按时间pw9qyyiw1#
.env
,因为这会引起几个麻烦(正如评论中提到的@apokryfos),麻烦包括缓存和手动更改这个文件。config([key => value])
。请参见https://laravel.com/docs/9.x/configuration#accessing-configuration-values此外,您可能需要考虑以下体系结构:
缓存
始终确保在更改配置后重置配置缓存。您可以通过编程方式执行此操作。请参阅https://laravel.com/docs/9.x/artisan#programmatically-executing-commands示例: