【发布时间】:2020-10-20 05:42:28
【问题描述】:
在 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
我的问题是 - 我做错了什么和/或应该如何正确设置/使用这些?
根据文档,我应该能够使用 .env 文件中已经使用分配的任何键
${somekeyinthisfile}
【问题讨论】:
-
您使用正确。我一直在闲逛,看来正则表达式不允许 . (点)。我还在找。
-
即使不使用这些点 - 我仍然无法让它在没有 CI_ENVIRONMENT 的情况下工作。使用 x = test somerandomvariablename = foo 它仍然读取为文字: [google.redirect] => ${x}GoogleLogin [google.redirect] => ${somerandomvariablename}GoogleLogin
-
啊哈,所以我想知道为什么我没有得到同样的东西......现在我想出了一个新的库文件来覆盖现有的 system\config\DotEnv.php 方法load() 和 resolveNestedVariables()。那么,目前这不起作用,您有多痛苦?
-
不太痛。我刚从 CI3 过来,只是在玩 CI4 以开始迁移我的站点的过程。如果它只是等到主代码中有修复 - 我可以等待。我一点也不着急。
-
好的 - 我有一个凌晨 4 点的“补丁”,可以让它唱歌跳舞,但它涉及直接更改 DotEnv.php 核心文件,在这种情况下这可能不是一件坏事...另一种方法是创建一个新的 DotEnv.php ,它只是覆盖这些方法...所以 ole - 在不直接更改系统文件的情况下更改内容。两者都很有趣 :) 所以这是一个有趣的小调试会话 :)