PHP Ver |
5.6.27 |
CakePHP Ver |
3.1.9 |
cakePHPでは、Unit用と通常利用するDBの設定が別々に設定されている。
しかし、一般的には開発機と本番機は別なので、本番機にアップする際に、いちいち設定を変更しないといけない。
そいつはミスする元凶になりそうだし、面倒だなぁ
ってことで、Unit用、開発機用、本番機用の3種類設定を行い、自動的に切り替えるようにしようと思い立つ。
既存のdefault・test以外にDBの向き先を変える方法
まずは、app.phpに設定を加える(ここでは開発機用の設定をdivとして追加)
通常はこんな感じ
----------------------------------------------
'Datasources' => [
'default' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => '本番機',
'log' => false, 'quoteIdentifiers' => false,
],
'test' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => 'localhost',
'log' => false,
],
],
----------------------------------------------
これに以下の内容を追加する
----------------------------------------------
'div' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => '開発機',
'log' => false,
],
----------------------------------------------
で、切り替える様にコードを改修
通常Modelの各Tableクラスは
Cake\ORM\Table
を継承しているけど、CustomTableみたいなクラスを作成してModelの各Tableクラスはこの新しく作成したクラスを継承して、CustomTableクラスで既存のTableクラスを継承する。
(要は、間に一枚かますってこと)
で、切り替えを行うために、既に準備されている”defaultConnectionName”というメソッドで向き先を設定してあげる。
と、新しく作成するファイルはこんな感じになる
----------------------------------------------
class CustomTable extends Table {
public static function defaultConnectionName() {
if (Configure::read('debug')) {
if (Unitだったら) {
return 'test';
} else {
return 'div';
}
} else {
return 'default';
}
}
}
----------------------------------------------
これで、設定ファイルをいちいち設定しなくても良くなる
しかし、const.phpのdebug設定は都度変えないといけない。
その対応は後々考えることに・・・