我有一个自定义 CMS,我在 Laravel 中从头开始编写,并希望在用户设置后从控制器设置 env
值,即数据库详细信息、邮件详细信息、一般配置等,并希望为用户提供灵活性使用我正在制作的 GUI 随时更改它们。
所以我的问题是,当我需要控制器时,如何将用户收到的值写入 .env
文件。
在旅途中构建 .env
文件是一个好主意,还是有其他解决方法?
提前致谢。
原文由 Chintan Palan 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个自定义 CMS,我在 Laravel 中从头开始编写,并希望在用户设置后从控制器设置 env
值,即数据库详细信息、邮件详细信息、一般配置等,并希望为用户提供灵活性使用我正在制作的 GUI 随时更改它们。
所以我的问题是,当我需要控制器时,如何将用户收到的值写入 .env
文件。
在旅途中构建 .env
文件是一个好主意,还是有其他解决方法?
提前致谢。
原文由 Chintan Palan 发布,翻译遵循 CC BY-SA 4.0 许可协议
我创建了它以在命令 package:install
中使用,以将 .env 键值对自动添加到 .env 文件中。
/**
* Set .env key-value pair
*
* @param array $keyPairs Desired key name
* @return void
*/
public function saveArrayToEnv(array $keyPairs)
{
$envFile = app()->environmentFilePath();
$newEnv = file_get_contents($envFile);
$newlyInserted = false;
foreach ($keyPairs as $key => $value) {
// Make sure key is uppercase (can be left out)
$key = Str::upper($key);
if (str_contains($newEnv, "$key=")) {
// If key exists, replace value
$newEnv = preg_replace("/$key=(.*)\n/", "$key=$value\n", $newEnv);
} else {
// Check if spacing is correct
if (!str_ends_with($newEnv, "\n\n") && !$newlyInserted) {
$newEnv .= str_ends_with($newEnv, "\n") ? "\n" : "\n\n";
$newlyInserted = true;
}
// Append new
$newEnv .= "$key=$value\n";
}
}
$fp = fopen($envFile, 'w');
fwrite($fp, $newEnv);
fclose($fp);
}
你传递给它一个关联数组:
$keyPairs = [
'KEY' => 'VALUE',
'API_KEY' => 'XXXXXX-XXXXXX-XXXXX'
]
它将添加它们或用给定值替换给定键的值。当然还有改进的余地,比如检查数组是否真的是一个关联数组。但这适用于 Laravel 命令类等硬编码的东西。
原文由 SneakyLenny 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答1.2k 阅读✓ 已解决
2 回答777 阅读✓ 已解决
1 回答747 阅读✓ 已解决
1 回答972 阅读✓ 已解决
2 回答843 阅读
1 回答836 阅读
1 回答777 阅读
由于 Laravel 使用配置文件来访问和存储
.env
数据,您可以使用config()
方法即时设置这些数据:要获取此数据,请使用
config()
:https://laravel.com/docs/5.3/configuration#accessing-configuration-values