2016年9月23日金曜日

cakephp3 開発機と本番機でDBの向き先を変える -- custom db connection --

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設定は都度変えないといけない。
その対応は後々考えることに・・・

0 件のコメント:

コメントを投稿