Red > Green > Refactor > Red

cycle is based on desire

複数のバリデーションを実行する CakePHP

前提

posts テーブルは下記の通り

id title created_at updated_at

やりたいこと

  • プロパティ title に以下の 2 validation が実行されること
    • アルファベットもしくは数字であること
    • 8 - 255 文字以内であること

方法

app/Model/Post.php

  1 <?php
  2   class Post extends AppModel {
  3     public $validate = array(
  4       'title' => array(
  5         'alphaNumeric' => array(
  6           'rule'    => 'alphaNumeric',
  7           'message' => 'Fill in alphabet or numeric',
  8         ),
  9         'between' => array(
 10           'rule'    => array('between', 8, 255),
 11           'message' => 'Fill in from 8 to 255',
 12         ),
 13       ),
 14     );
 15   } 
 16 ?>

一般化すると

  1 <?php
  2   class モデル名 extends AppModel {
  3     public $validate = array(
  4       'プロパティ名' => array(
  5         'バリデーション名1' => array(
  6           'rule'    => 'バリデーション1',
  7           'message' => 'メッセージ1',
  8         ),
  9         'バリデーション名2' => array(
 10           'rule'    => バリデーション2
 11           'message' => 'メッセージ2',
 12         ),
 13       ),
 14     );
 15   } 
 16 ?>

補足

alphaNumeric は日本語文字を通してしまう