我正在制作一个客户CMS,我希望管理员用户能够从GUI(管理设置)修改一些变量,例如邮件变量。因此,他们可以使用提供的更新表单轻松更改环境文件中的某些值。
我在创建的帮助程序文件中创建了一个自定义函数,并向其中添加了以下代码
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,否则它们将不再更新。
更新前我的环境变量如下所示:
MAIL_MAILER=mail
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="[email protected]"
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="[email protected]"
MAIL_FROM_NAME="${APP_NAME}"
我将不胜感激任何关于如何完美地完成这项工作的帮助。
.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 示例:
Artisan::call('cache:clear')
经过很长一段时间,在每天使用 Laravel 的过程中,我已经弄清楚了。
$envFile = base_path('.env');
// Read the existing .env file into an array
$envContent = file($envFile);
// Loop through the array and update the values for the specified environment variables
foreach ($envContent as $key => $line) {
foreach ($data->all() as $envKey => $envValue) {
if (Str::startsWith($line, $envKey)) {
$envContent[$key] = "$envKey=\"" . addslashes($envValue) . "\"\n";
}
}
}
// Write the updated .env file
file_put_contents($envFile, implode('', $envContent));
$data 变量只是表单输入,您可以将其用作
$request->all();
该代码有效并且一直为我工作