cakephp2.doc_041
R e i - D r e a m
for Laravel
TOP > CakePHP2 > Model関連(バリデーション)
Guest
login

最終投稿日:2019年11月20日

Model関連(バリデーション)
CakePHP2.x
【基本】
    public $validate=array(
        [フィールド名]=>array(
            [任意の名前]=>array("rule"=>"条件"),
            [任意の名前]=>array("rule"=>"条件"),
            [任意の名前]=>array("rule"=>"条件")
        ),
        [フィールド名]=>array(
        )
    );

    ・[rule]にバリデーションのルールを記述する。値は単一or配列です。
    ・[required]は論理値です。trueにするとレコードの保存の際、このフィールドがないとエラーとなります。
    ・[allowEmpty]false を割り当てたら、データがモデルの save() メソッドを通過するには、
        フィールドが存在しその値が空で無いことが必要です。
         true にセットした場合、空のフィールドは他に設定された
        全てのバリデーションを無視します。
    ・[on]には"create"か"update"を割り当てます。"create"を設定すると、新規登録時しかチェックしません。
    ・[message]は、エラーメッセージを定義します。

    << ruleの種類 >>
        notEmpty        内容が空ならエラー
        url             URLかチェック
        numeric         数値かチェック
        money           金額として有効かチェック
        maxLength       長いとエラー
                 例)"rule"=>array("maxLength","10")
        minLength       短いとエラー
        isUnique        フィールド値が他と重複したらエラー
        extension       ファイルの拡張子のチェック
                 例)"rule"=>array("extension"=>array("gif","jpg","png"))
        email           メルアドかチェック
        comparison      数値を比較する
                 例)"rule"=>array("comparison",">=",18)    18以上でOK
        between         数値の間かチェック
                 例)"rule"=>array("between",10,20)    10以上20以下
        alphaNumeric    半角英数のみOK

            ※何故か「alphaNumeric」は全角も通るので以下の様にも設定できます。
            "myalphaNumeric"=>array('rule' => array(
                    'custom', '/^[a-z\d]*$/i'),"message"=>"半角英数のみ使用可能です"),

            ※「numeric」に関しても、「16進数」や「+1」等も通るため以下の様にした方が良い
            "myNumeric"=>array('rule' => array(
                    'custom','/^[0-9\d]*$/i'),"message"=>"半角数字のみ使用可能です")


【独自のバリデーションルール】

    rule"=>"条件"の構文の"条件"とは、実はcakephpの内部関数名です。
    なので、任意の名前にすればそれが独自の関数名となります。

    例)カナ以外はNG
        function myKana($data){
            //どちらの記述でも値を取得できる
            //echo current($data);
            //どちらの記述でも値を取得できる
            //echo $this->data["Test"]["kana"];
            
            $val = current($data);
            if(!preg_match("/^[ァ-ヶー]+$/u", $val)){
                return false;
            }
            return true;
        }

            ※独自関数へパラメータを渡すには

            //ルールを更に配列にし、関数名の後の「25」が$dataに続くパラメータとなります
            'rule' => array('limitDuplicates', 25),
            //$param に 「25」が渡ります。
            function limitDuplicates($data,$param) {
            
レンズモード 【新規購入限定用】
ログインしてコメントを残そう!!


きっぷる