CakePHP3中的生产,开发和测试之间的数据库切换

时间:2019-04-22 07:38:10

标签: php-7 cakephp-3.x

我目前在config / app.php中有两个数据库设置,一个用于生产的名称为“ default”,另一个用于开发的名称为“ test”。现在,我想将当前的“测试”重命名为“ dev”并进行第三个设置,将其命名为“ test”以用于测试。 在生产数据库和开发数据库之间进行切换可以正常工作,但是当我仍处于开发环境(在开发分支中工作)时,我的应用程序如何知道何时使用测试数据库?我应该对哪些文件进行哪些更改? 我整天都在搜寻Google,但是我只能找到在生产和开发之间切换的方式。我需要知道如何在开发和测试之间进行切换。

下面是我要牢记的一点,但是我敢肯定,我也必须修改其他一些文件才能使它们正常工作。

# config/app.php

'Datasources' => [

  // Production
  'default' => [
    'className' => 'Cake\Database\Connection',
    'driver' => 'Cake\Database\Driver\Mysql',
    'persistent' => false,
    'host' => 'MY PRODUCTION HOST',
    'username' => 'MY PRODUCTION USERNAME',
    'password' => 'MY PRODUCTION PASSWORD'
    'database' => 'MY PRODUCTION DATABASE NAME'
    'quoteIdentifiers' => false,
    // 'encoding' and so on...
  ],

  // Development
  'dev' => [
    'className' => 'Cake\Database\Connection',
    'driver' => 'Cake\Database\Driver\Mysql',
    'persistent' => false,
    'host' => 'MY DEVELOPMENT HOST',
    'username' => 'MY DEVELOPMENT USERNAME',
    'password' => 'MY DEVELOPMENT PASSWORD'
    'database' => 'dev'
    'quoteIdentifiers' => false,
    // 'encoding' and so on...
  ],

  // Test
  'test' => [
    'className' => 'Cake\Database\Connection',
    'driver' => 'Cake\Database\Driver\Mysql',
    'persistent' => false,
    'host' => 'SAME AS MY DEVELOPMENT HOST',
    'username' => 'SAME AS MY DEVELOPMENT USERNAME',
    'password' => 'SAME AS MY DEVELOPMENT PASSWORD'
    'database' => 'test'
    'quoteIdentifiers' => false,
    // 'encoding' and so on...
  ]
],

我对CakePHP完全陌生,因此任何建议/建议都将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

一种方法是在开发环境中设置未在生产环境中设置的环境变量,例如:

DEV_ENVIRONMENT=true

在应用程序的启动脚本中,您可以在config/bootstrap.php中查找该环境变量,如果设置了该变量,则可以将default连接的别名为dev

bootstrap.php 中:

// Look for this line:
ConnectionManager::setConfig(Configure::consume('Datasources'));

// Add your code someplace after that:
if(getenv('DEV_ENVIRONMENT')){
    ConnectionManager::alias('dev', 'default');
}

只要在应用中引用dev连接时,别名函数就会加载default数据源(除非覆盖所有表,否则所有表都会这样做)。

这与PhpUnit测试在测试运行期间用来替代test数据源配置的方法大致相同。