我有一个用 Zend Framework 编写的 PHP 应用程序。它使用 Phing 作为构建系统,使用 PHPUnit 进行单元测试。所有这些部分都有配置设置。Zend 使用application.xml
,Phing 使用build.xml
和可选的一些build.properties
,以及 PHPUnit 使用phpunit.xml
。
但是,我在哪里存储所有三个组件所需的信息?想想数据库配置(例如密码)。
就我而言,它application.xml
有不同的部分(开发、登台、生产),都具有不同的数据库配置。我最近在我的应用程序中集成了一个 ORM,现在我想对我的模型进行单元测试。所以我有 PHPUnit 使用的第四个数据库(单元测试)。
PHPUnit 可以处理夹具数据,但不能处理数据库模式。所以,我想我会编写一个 Phing 构建目标,将数据库模式从生产或登台复制到 unittest 数据库。这样我就有了额外的好处,我什至可以对我的数据库迁移脚本进行单元测试。但为了做到这一点,Phing 需要同时访问多个数据库。
我的第一个直觉是把所有四个数据库的所有配置都放进去build.properties
,让 Phing 简单地生成application.xml
和phpunit.xml
. 但是,让构建系统生成配置文件感觉很脏。
这里最好的解决方案是什么?还是我应该简单地复制配置细节而不用太担心?
想法
我可以简单地复制它们。这只是一些设置,它们不应该经常更改。但我敢打赌,当它们发生变化时,我会忘记重复(因为它很少发生)。共享参数包括:
- 数据库配置(开发、登台、生产和单元测试)
- 包括路径。我们使用一些不支持自动加载器的旧库。到目前为止,我们已经通过智能自动前置文件部分解决了这个问题。
- 一些网络服务 API 凭证