我目前正在 Phing 中开发一个构建系统,该系统采用 Zend Framework 项目模板并根据 Phing 参数对其进行配置。我遇到的一个问题是使用 Zend_Config_Writer_Ini 时。
我的 Phing 任务从存储库中获取一个名为 application.default.ini 的预填充文件,并使用 Zend_Config_Ini 修改该文件以添加构建文件中的参数(数据库详细信息等)。然后将其写入 application.ini 供项目使用。相关任务代码的简化版本如下所示:
$appConfig = new Zend_Config_Ini(
$appDefaultConfigPath,
null,
array(
'skipExtends' => true,
'allowModifications' => true
)
);
$appConfig->production->resources->db->params->host = $buildProperties->db->host;
$appConfig->production->resources->db->params->username = $buildProperties->db->username;
$appConfig->production->resources->db->params->password = $buildProperties->db->password;
$appConfig->production->resources->db->params->dbname = $buildProperties->db->dbname;
$writer = new Zend_Config_Writer_Ini();
$writer->setConfig($appConfig)
->setFilename($appConfigPath)
->write();
就数据库凭证而言,这工作得很好,但是当涉及到包含定义常量的预填充路径时,就会出现问题。例如:
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
becomes:
bootstrap.path = "APPLICATION_PATH/Bootstrap.php"
在读取/写入不同的 ini 文件时,有什么方法可以保留这些配置行,或者我应该重构构建文件以在运行任务之前复制文件,并且只修改我需要更改的 ini 行?
当您加载现有配置时,所有常量都已翻译,即,如果您使用 print_r 查看对象,您将不再找到常量。因此,对于编写器来说,会打印完整路径而不是常量。
在您的情况下,我猜您的环境中不存在常量,因此按原样打印。
Update: 更具体。Zend_Config_Ini::_parseIniFile()
uses parse_ini_file()
读取将常量加载为真实路径的 ini 文件。看php.net 文档示例 #2 http://us.php.net/manual/en/function.parse-ini-file.php
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)