在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_.]+)}/',