我目前正在 Phing 中开发一个构建系统,该系统采用 Zend Framework 项目模板并根据 Phing 参数对其进行配置。我遇到的一个问题是在使用 Zend_Config_Writer_Ini 时。
我的 Phing 任务从 repo 中获取一个名为 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"
变成:
bootstrap.path = "APPLICATION_PATH/Bootstrap.php"
有没有办法在读取/写入不同的 ini 文件时保留这些配置行,或者我应该在运行任务之前重组我的构建文件以复制文件并且只修改我需要更改的 ini 行?