gpt4 book ai didi

php - 全局更改 CakePHP 数据库配置

转载 作者:行者123 更新时间:2023-11-29 07:01:58 25 4
gpt4 key购买 nike

我的 CakePHP 项目使用了两个数据库,分别名为 projectproject_dev。数据库project用于生产中,因为从版本3开始,CakePHP删除了表前缀选项,我选择使用两个独立的数据库。

从我的/config/app.php 中摘录:

'Datasources' => [
'dev' => [...],
'prod' => [...]
]

问题是我需要使用dev数据库...进行开发;所以我需要告诉 Cake 在开发过程中默认使用 dev 配置。

为此,我尝试创建一个 AppTable.php,一个由我的所有 *Table.php 文件继承的类,具有以下功能:

/**
* Define the connection name based on the debug config value
* @return string the connection name
*/
public static function defaultConnectionName(): string {
return Configure::read('debug') ? 'dev' : 'prod';
}

对于一些任务(例如单元测试)的问题,Cake 尝试使用默认数据库配置。

我担心我的 AppTable.php hack 效率不高,我认为直接在 app.php 中调整加载配置,如下所示:

$config = [
[...],
'Datasources' => [
'dev' => [...],
'prod' => [...]
],
'UseDatasourcesConfig' => 'dev',
[...],
];

$config['Datasources']['default'] = $config['Datasources']['UseDatasourcesConfig'];

return $config;

...听起来也像黑客。

第二种方法可行吗?或者是否存在更正式/正确的全局设置数据库配置的方法?

最佳答案

根据环境提供配置是一项非常常见的任务,还有很多其他方法可以处理此问题。

环境变量

如果环境允许,您可以使用环境变量。您可以通过 DATABASE_URL 变量以 DSN 连接字符串的形式轻松提供数据库配置,例如

mysql://user:pass@localhost/production?encoding=utf8&timezone=UTC&cacheMetadata=true

Cookbook > Configuration > Environment Variables

其他配置文件

另一个选项是根据当前环境加载单独/附加的配置文件,以便您可以仅部署特定环境实际需要的那些文件。

Configure::load('app', 'default', false);
// $enviroment needs to be validated /sanitzied in order to
// avoid loading arbitrary files from the config directory
Configure::load($enviroment, 'default', true);

Cookbook > Configuration > Loading Additional Configuration Files

连接别名

还有连接别名,CakePHP 在测试环境中自动执行此操作。假设您有一个 default 和一个 product 配置,那么您可以在生产中将 product 连接别名为 default环境,以便您的代码在任何尝试使用默认连接的地方,实际上都会使用生产连接。

\Cake\DataSource\ConnectionManager::alias('production', 'default');

API > \Cake\DataSource\ConnectionManager::alias()

关于php - 全局更改 CakePHP 数据库配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43126347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com