我正在使用cakephp v3,并希望在两种不同的环境中安装应用程序,一种用于开发,另一种用于生产。两种安装都应包含完全相同的文件(和文件内容),因此我可以使用'git'或'svn'轻松部署应用程序。
如果两个环境都托管在同一台计算机上,则我需要不同的数据库设置(以便开发环境使用其自己的“测试”数据库)。我想到了在中配置两个“数据源” app.php
,“默认”用于生产和“开发”。
但是,如何在两个来源之间切换?
更具体地说:目前,我在Apache配置中为开发环境定义以下环境变量:
SetEnv CAKEPHP_DEBUG 1
然后,我在app.php
文件中更改了“调试”的定义,如下所示:
'debug' => (bool)getenv('CAKEPHP_DEBUG'),
这仅在开发计算机上启用调试模式。现在,我还想以同样简单的方式切换数据库配置。
(我已经找到了cakephp v2的一些解决方案,但是所有解决方案都已经很老了,我不确定在cakephp v3中实现它的最佳方法是什么。)
该手册说
您可以在配置文件中定义任意数量的连接。您也可以在运行时使用Cake \ Datasource \ ConnectionManager :: config()定义其他连接。
所以我想您可以检查debug的值AppController
beforeFilter
并更改默认的数据库连接
AppController.php
if(Configure::read('debug') == 1)
{
ConnectionManager::config('default', [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => 'dev_server',
'username' => 'dev_username',
'password' => 'dev_passwd',
'database' => 'development',
'encoding' => 'utf8',
'timezone' => 'UTC',
'cacheMetadata' => true,
]);
}
我认为您可以使用三元运算符在app.php中执行类似操作
app.php
'Datasources' => [
'default' => getenv('CAKEPHP_DEBUG')== 1 ? [ /* debug params */ ] : [ /* default params */]
...
]
但是不知何故似乎不是“干净”的方法
我认为更干净的方法是在app.php中设置两个配置,然后在appController中选择要使用的配置
app.php
'Datasources' => [
'debug' => [ /* debug params */ ],
'default' => [ /* default params */]
]
表格文件
public static function defaultConnectionName() {
if(Configure::read('debug') == 1)
return 'debug';
return 'default';
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句