我通常使用这样的模式,并且有各种配置文件,每个服务一个。此示例适用于 PostgreSQL:
1.准备单独的环境文件
为应用程序运行的每个环境创建一个文件,但将其命名为通用名称,例如 config.local.php。要么将该文件永久放置在服务器上,要么在部署期间从不可访问的环境文件夹复制到相关位置到常规配置文件夹(使用钩子/部署后脚本等)。文件格式可能如下所示:
define("POSTGRESQL_DATABASE", "mydatabasename");
define("POSTGRESQL_USERNAME", "myusername");
define("POSTGRESQL_PASSWORD", "itsasecret");
define("POSTGRESQL_SERVER_IP", "localhost");
例如你可能有这样的文件夹结构:
-config
-environments
-test
-config
-prod
-config
-public_html
...并在部署后挂钩中将/environments/prod/config/ 的内容复制到/config/。
理想情况下,您应该将配置文件排除在主源代码控制之外,而是在每台服务器上单独创建它们(也许从单独的安全存储库中复制它们?)
此文件将在您的初始化过程中从/config/ 包含进来。
2。创建一个使用这些常量的配置类
创建包含配置变量的配置类,setter 是私有的(并在构造函数中调用),getter 是公共的。
class PostgreSQLDatabaseConfiguration
{
private $databaseName = null;
private $password = null;
private $serverIP = null;
private $username = null;
#endregion
#region Public methods
final public function __construct($serverIP, $databaseName, $username, $password) {
$this
->setServerIP($serverIP)
->setDatabaseName($databaseName)
->setUsername($username)
->setPassword($password);
}
/**
* @return string
*/
public function getDatabaseName() {
return $this->databaseName;
}
public function getPassword() {
return $this->password;
}
public function getServerIP() {
return $this->serverIP;
}
public function getUsername() {
return $this->username;
}
#endregion
#region Private methods
private function setDatabaseName($databaseName) {
$this->databaseName = $databaseName;
return $this;
}
private function setPassword($password) {
$this->password = $password;
return $this;
}
private function setServerIP($serverIP) {
$this->serverIP = $serverIP;
return $this;
}
private function setUsername($username) {
$this->username = $username;
return $this;
}
#endregion
}
3.拥有一个生成配置类的通用配置文件
此文件对所有环境都是通用的(即构成标准部署的一部分),并将使用上一步中定义的常量实例化配置对象:
include('/config/config.local.php');
$postgresqlDatabaseConfiguration = new PostgreSQLDatabaseConfiguration(
POSTGRESQL_SERVER_IP,
POSTGRESQL_DATABASE,
POSTGRESQL_USERNAME,
POSTGRESQL_PASSWORD
);
您的配置对象现在已准备好注入您的 DatabaseAccessor 类,并且您的主要代码库与环境无关。