.env 文件中的嵌套变量如何在 CodeIgniter 4 中工作



在Codeigniter4站点的"嵌套变量"部分下:

"为了节省键入时间,您可以通过将变量名称包装在 ${...} 中来重用文件中已经指定的变量。" 链接到 CI 嵌套变量部分

文档中的示例:

BASE_DIR="/var/webroot/project-root"
CACHE_DIR="${BASE_DIR}/cache"
TMP_DIR="${BASE_DIR}/tmp"

我试图使用以下

app.baseURL = 'http://localhost:8080/'
google.redirect = ${app.baseURL}Google

但是,当print_r($_ENV(时,它会将其分配为文本

[google.redirect] => ${app.baseURL}Google

我尝试使用包括BASE_DIR在内的非命名空间键(根据示例(,并且它一直作为文字打印。

奇怪的是 - 当我使用以下内容时:

CI_ENVIRONMENT = development
google.redirect = ${CI_ENVIRONMENT}Google

print_r时的结果是:

[CI_ENVIRONMENT] => development
[google.redirect] => developmentGoogle

我的问题是 - 我做错了什么和/或应该如何正确设置/使用这些?

根据文档,我应该能够在 .env 文件中使用已经使用

${somekeyinthisfile}

经过一番查看,有一个更新的文件在 https://github.com/codeigniter4/CodeIgniter4/blob/develop/system/Config/DotEnv.php 随着所有"其他"变化...

这是一个错误修复。因此,获取该文件,您将很高兴。

我很确定其意图不是允许将 app.xxx 设置用作变量,正如文档清楚地表明的那样,不是 显示它们正在使用。(是的,现在是早上6点...

但这是你的代码,随心所欲地做...因此,如果您想将 app.xxx 用作变量...

唯一缺少的是正则表达式中的 DOT (.(

如果你查看第 272 行 - system/Config/DotEnv.php 在方法 resolveNestedVariables(( 中并添加一个 .(点(到正则表达式中,这将使您的所有应用程序正常工作。

$value = preg_replace_callback(
'/${([a-zA-Z0-9_.]+)}/',
function ($matchedPatterns) use ($loader) {

我在[a-zA-Z0-9_末尾添加了一个点 (.(

所以
'/${([a-zA-Z0-9_]+)}/',

成为

'/${([a-zA-Z0-9_.]+)}/',

相关内容

  • 没有找到相关文章

最新更新