2016年9月30日金曜日

cakephp3 Trimについて

PHP Ver 5.6.27
CakePHP Ver 3.1.9


入力値の前後にある全角/半角スペースを取り除きたい

cakephp3 の Validation では全角スペースだけが入力された場合などは、notEmpty を指定していても、
普通に通ってしまう。

ということで Trim しなければならないのですが、どこのタイミングで行うか。

調べた結果、公式に載っていました。
http://book.cakephp.org/3.0/ja/orm/saving-data.html#before-marshal

テーブルまたはビヘイビアクラスの beforeMarshal メソッドで行いなさいと。
 
タイミングはこれでOK。
しかし、ここに記載されている通り デフォルトのメソッド Trim だけを行ってしまうと
全角スペースは対応できない。

ってことで、全角スペースにも対応した Trim メソッドを作成することに。

----------------------------------

    public static function mb_trim($str) {
        return trim(preg_replace('/[  ]+$/u', '', preg_replace('/^[  ]+/u', '', $str)));
    }
----------------------------------
 
これで良いかと思いきや、半角スペース - 垂直タブ - 全角スペースみたいな入力を
されてしまうと対応できないんですね・・・
対応が難しそうなので、このメソッドは暫定でこのままにしておいて、後々考えようと
思います。 

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

2016年9月15日木曜日

Google Translateを使用してサイトを多言語化 -- use Google Translate For Localization --

  • Google Translate 登録画面へアクセス(事前にGoogleアカウント取得)
    • https://translate.google.com/manager/website/
    1. 「今すぐウェブサイトに追加」 ボタン押下
    2. ウェブサイトの URLを入力
    3. ウェブサイトの言語を選択
    4. 「次へ」 押下
    5. 翻訳する言語を選択
      1. すべての言語を選択すると一般的に使われない言語が多いので、言語を指定を選ぶことをおすすめ
    6. 表示モード選択
    7. 詳細設定選択
    8. 「コードを取得」 ボタンを押下 
    9. 表示されたHTMLをWebサイトに貼り付け