libro
www.tuyano.com
初心者のためのCakePHP2 プログラミング入門

バリデーションを使おう! (3/5)

作成:2011-12-12 08:00
更新:2011-12-12 08:22

■より本格的なバリデーションの設定

シンプル・ルールは、簡単な入力チェックには役立つのですが、いろいろと問題もあります。まず、エラーメッセージの問題。英語の、しかもどれも同じようなメッセージではなんだかよくわかりません。

そこで、シンプル・ルールではなく、より本格的にバリデーションの設定を行う、いわば本式の書き方を使って設定してみることにしましょう。下のリスト欄に、本式の書き方でバリデーションを設定した例を挙げておきました。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の値を設定します。

※プログラムリストが表示されない場合

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 プログラミング入門」に戻る