我正在使用cakephp v3,并希望在两个不同的环境中安装该应用程序,一个用于开发,一个用于生产用途。 两种安装都应包含完全相同的文件(和文件内容),因此我可以使用"git"或"svn"轻松部署应用程序。
如果两个环境都托管在同一台机器上,我需要不同的数据库设置(以便开发环境使用自己的"测试"数据库)。 我想在app.php
中配置两个"数据源",一个用于生产和一个"开发"的"默认"数据源。
但是,如何在两个来源之间切换呢?
更具体地说:目前,我在开发环境的 Apache 配置中定义了以下环境变量:
SetEnv CAKEPHP_DEBUG 1
然后我更改了app.php
文件中"debug"的定义,如下所示:
'debug' => (bool)getenv('CAKEPHP_DEBUG'),
这仅在开发计算机上启用调试模式。 现在我还想以同样简单的方式切换数据库配置。
(我已经为 cakephpv2 找到了一些解决方案,但所有这些解决方案都非常古老,我不确定在 cakephp v3 中做到这一点的最佳方法是什么。
手册说
您可以在配置中定义任意数量的连接 文件。您还可以在运行时使用 Cake\Datasource\ConnectionManager::config().
所以我想你可以在AppController
beforeFilter
中检查调试的值并更改默认数据库连接
应用控制器.php
if(Configure::read('debug') == 1)
{
ConnectionManager::config('default', [
'className' => 'CakeDatabaseConnection',
'driver' => 'CakeDatabaseDriverMysql',
'persistent' => false,
'host' => 'dev_server',
'username' => 'dev_username',
'password' => 'dev_passwd',
'database' => 'development',
'encoding' => 'utf8',
'timezone' => 'UTC',
'cacheMetadata' => true,
]);
}
我认为您可以在应用程序中做类似的事情.php使用三元运算符
应用.php
'Datasources' => [
'default' => getenv('CAKEPHP_DEBUG')== 1 ? [ /* debug params */ ] : [ /* default params */]
...
]
但不知何故,这似乎不是"干净"的方式
我认为更干净的方法是在应用程序中设置两种配置.php然后在应用程序控制器中选择要使用的配置
应用.php
'Datasources' => [
'debug' => [ /* debug params */ ],
'default' => [ /* default params */]
]
表文件
public static function defaultConnectionName() {
if(Configure::read('debug') == 1)
return 'debug';
return 'default';
}