バリデーションを使おう! (3/5)
作成:2011-12-12 08:00
更新:2011-12-12 08:22
更新:2011-12-12 08:22
■より本格的なバリデーションの設定
シンプル・ルールは、簡単な入力チェックには役立つのですが、いろいろと問題もあります。まず、エラーメッセージの問題。英語の、しかもどれも同じようなメッセージではなんだかよくわかりません。
そこで、シンプル・ルールではなく、より本格的にバリデーションの設定を行う、いわば本式の書き方を使って設定してみることにしましょう。下のリスト欄に、本式の書き方でバリデーションを設定した例を挙げておきました。addからデータを追加してみましょう。問題あるデータだとエラーメッセージが日本語できちんと表示されます。
ここでは、$validateに連想配列を設定する点は同じですが、それぞれの項目の値に更に連想配列が用意されています。整理すると、こういうことですね。
‘rule’――バリデーション・ルールの名前を設定します。
‘required’――必須項目かどうかの設定をします。これをtrueに設定すれば、必須項目として扱われます。
‘allowEmpty’――これはrequiredの反対で、カラの状態を受け付けるかどうかを指定するものです。trueにすると、未入力をOKします。
‘message’――エラーメッセージです。バリデーションに引っかかると、このメッセージがフォームの項目下に表示されます。
‘on’――これは、バリデーションが機能する際のアクションを指定するものです。設定できる値は’create’, ‘update’のみです。createならデータの生成時、updateなら更新時にのみバリデーションを機能させます。デフォルトはnullで、この状態だと両方共にバリデーションが機能します。
これらは、常にこのような形というわけではありません。特に’rule’は、名前でなく配列で設定される場合もあります。例えば、一定範囲内の数字のみを入力させるbetweenというバリデーション・ルール(後述)がありますが、これなどは名前と最小値・最大値を配列として’rule’に設定します。
そこで、シンプル・ルールではなく、より本格的にバリデーションの設定を行う、いわば本式の書き方を使って設定してみることにしましょう。下のリスト欄に、本式の書き方でバリデーションを設定した例を挙げておきました。addからデータを追加してみましょう。問題あるデータだとエラーメッセージが日本語できちんと表示されます。
ここでは、$validateに連想配列を設定する点は同じですが、それぞれの項目の値に更に連想配列が用意されています。整理すると、こういうことですね。
$validate = array(それぞれに連想配列で、バリデーションの細かな情報を設定しています。この連想配列は、以下のような構造になっていることがわかるでしょう。
テーブルの項目名 => array(……細かな設定情報……) ,
テーブルの項目名 => array(……細かな設定情報……) ,
……必要なだけ続く……
}
array(この他にも、連想配列に用意される設定はいくつかあります。ここでひと通り整理しておきましょう。
‘rule’=> バリデーション名,
‘required’=>真偽値,
‘message’=>エラーメッセージ,
}
‘rule’――バリデーション・ルールの名前を設定します。
‘required’――必須項目かどうかの設定をします。これをtrueに設定すれば、必須項目として扱われます。
‘allowEmpty’――これはrequiredの反対で、カラの状態を受け付けるかどうかを指定するものです。trueにすると、未入力をOKします。
‘message’――エラーメッセージです。バリデーションに引っかかると、このメッセージがフォームの項目下に表示されます。
‘on’――これは、バリデーションが機能する際のアクションを指定するものです。設定できる値は’create’, ‘update’のみです。createならデータの生成時、updateなら更新時にのみバリデーションを機能させます。デフォルトはnullで、この状態だと両方共にバリデーションが機能します。
これらは、常にこのような形というわけではありません。特に’rule’は、名前でなく配列で設定される場合もあります。例えば、一定範囲内の数字のみを入力させるbetweenというバリデーション・ルール(後述)がありますが、これなどは名前と最小値・最大値を配列として’rule’に設定します。
'rule'=>array('between', 5, 10)例えば、こんな具合ですね。これで5〜10の数値のみ受け付けるような設定が行えます。こうした「バリデーション・ルールに何らかの値が必要となるもの」では、配列としてruleの値を設定します。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※MySampleDatum.php <?php App::uses('AppModel', 'Model'); class MySampleData extends AppModel { public $validate = array( 'name'=>array( 'rule'=>'isUnique', 'required'=>true, 'message'=>'必ずユニークな名前を入力してください。' ), 'mail'=>array( 'rule'=>'email', 'required'=>true, 'message'=>'メールアドレスを入力ください。' ), 'tel'=>array( 'rule'=>'alphaNumeric', 'required'=>true, 'message'=>'半角英数字で入力ください。-は付けないでください。' ) ); }
※関連コンテンツ
「初心者のためのCakePHP2 プログラミング入門」に戻る