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

How do nested variables within the .env file work in CodeIgniter 4

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

“为了节省键入时间,您可以通过将变量名称包装在 ${...} 中来重用已在文件中指定的变量” link to CI nesting Variables section

文档中的示例:

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

我的问题是 - 我做错了什么 and/or 这些应该如何 set/used 正确?

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

分配的任何密钥

${somekeyinthisfile}

稍作查找后,有一个更新的文件位于 https://github.com/codeigniter4/CodeIgniter4/blob/develop/system/Config/DotEnv.php 所有“其他”变化...

这是一个错误修复。所以获取该文件,你会很高兴。

I am pretty sure that the intention wasn't to allow app.xxx settings to be used as variables as the documentation clearly shows, by not showing them being used. ( yes its 6am now ...)

但这是您的代码,您可以随意使用...因此,如果您想使用 app.xxx 作为变量...

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

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

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

我在 [a-zA-Z0-9_

的末尾添加了一个点 (.)

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

变成

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