CakePHP(v 3.x)、Validationのメッセージを自分で定義する。

CakePHPで、以下のようなValidationをかけている時に、

    $validator
        ->decimal('number');

このテーブルnumberというフィールドには数値しか代入できないようにValidationがかかります。

このテーブルに適当に文字列を打ち込んでエラーメッセージを見てみると

    $table = TableRegistry::getTableLocator()->get("Tables")->newEntity(['number' => 'hoge']); // hogeという文字列でvalidationにかかる
    echo($table->getErrors()); // [decimal] => 入力値の形式が不正です

というエラーがデフォルトで得られます。ですが正直、このようなエラーを表にそのまま出してもユーザにとってはどのように不正なのかはよくわかりません。

こういう時は独自に$validatorのmessageを書くと良いです。

    $validator
        ->add('number', 'decimal', [
            'rule' => ['decimal'],
            'message' => __('入力が数値ではありません')
        ])

このようにdecimalのエラーメッセージを書き換えることで、ユーザにとってもわかりやすいメッセージを出力することができます。

    $table = TableRegistry::getTableLocator()->get("Tables")->newEntity(['number' => 'hoge']); // hogeという文字列でvalidationにかかる
    echo($table->getErrors()); // [decimal] => 入力が数値ではありません