如何让Cakephp 3通过Apache环境变量选择数据库连接
How to let Cakephp 3 choose database connection by Apache environment variable
我正在使用 cakephp v3,我想在两种不同的环境中安装该应用程序,一种用于开发,一种用于生产。两个安装应包含完全相同的文件(和文件内容),因此我可以使用 'git' 或 'svn' 轻松部署应用程序。
如果两个环境都托管在同一台机器上,我需要不同的数据库设置(以便开发环境使用自己的 'testing' 数据库)。我想在 app.php
中配置两个 'Datasources','default' 一个用于生产,一个用于“开发”。
但是如何在两个来源之间切换?
更具体地说:目前我在我的 Apache 配置中为开发环境定义了以下环境变量:
SetEnv CAKEPHP_DEBUG 1
然后我在 app.php
文件中更改了 'debug' 的定义,如下所示:
'debug' => (bool)getenv('CAKEPHP_DEBUG'),
这仅在开发机器上启用 DEBUG 模式。现在我也想以同样简单的方式切换数据库配置。
(我已经找到了一些适用于 cakephp v2 的解决方案,但它们都已经过时了,我不确定在 cakephp v3 中最好的解决方案是什么。)
manual 说
You can define as many connections as you want in your configuration
file. You can also define additional connections at runtime using
Cake\Datasource\ConnectionManager::config().
所以我想你可以检查 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 */]
...
]
但不知何故,这似乎不是 'clean' 的方法
我认为更简洁的方法是在 app.php 中设置两个配置,然后在 appController 中选择要使用的配置
app.php
'Datasources' => [
'debug' => [ /* debug params */ ],
'default' => [ /* default params */]
]
Table 文件
public static function defaultConnectionName() {
if(Configure::read('debug') == 1)
return 'debug';
return 'default';
}
我正在使用 cakephp v3,我想在两种不同的环境中安装该应用程序,一种用于开发,一种用于生产。两个安装应包含完全相同的文件(和文件内容),因此我可以使用 'git' 或 'svn' 轻松部署应用程序。
如果两个环境都托管在同一台机器上,我需要不同的数据库设置(以便开发环境使用自己的 'testing' 数据库)。我想在 app.php
中配置两个 'Datasources','default' 一个用于生产,一个用于“开发”。
但是如何在两个来源之间切换?
更具体地说:目前我在我的 Apache 配置中为开发环境定义了以下环境变量:
SetEnv CAKEPHP_DEBUG 1
然后我在 app.php
文件中更改了 'debug' 的定义,如下所示:
'debug' => (bool)getenv('CAKEPHP_DEBUG'),
这仅在开发机器上启用 DEBUG 模式。现在我也想以同样简单的方式切换数据库配置。
(我已经找到了一些适用于 cakephp v2 的解决方案,但它们都已经过时了,我不确定在 cakephp v3 中最好的解决方案是什么。)
manual 说
You can define as many connections as you want in your configuration file. You can also define additional connections at runtime using Cake\Datasource\ConnectionManager::config().
所以我想你可以检查 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 */]
...
]
但不知何故,这似乎不是 'clean' 的方法
我认为更简洁的方法是在 app.php 中设置两个配置,然后在 appController 中选择要使用的配置
app.php
'Datasources' => [
'debug' => [ /* debug params */ ],
'default' => [ /* default params */]
]
Table 文件
public static function defaultConnectionName() {
if(Configure::read('debug') == 1)
return 'debug';
return 'default';
}