CakePHPのモデルの代表的な機能でバリデーションがあります.
カンタンなバリデーションルールを記述するだけで,開発者は正規表現などを意識しなくてもある程度の入力チェックを行えるようになります.
第7回演習の動作例ではこのバリデーションを使っているので解説します.
この動作例ではユーザー登録をする画面を用意し,入力を行った際にルールに適さない内容があった場合は登録をキャンセルする.という内容です.
1. Entriesコントローラー作成
まずはコントローラーを準備しましょう. Userモデルにユーザを登録していきます.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php class EntriesController extends AppController { public $name = "Entries"; public $uses = array('User'); public $components = array('DebugKit.Toolbar'); //DebugKitの適用 public $layout = 'bootstrap'; function index(){ $this->set("data",$this->User->find('all')); }//Form function result(){//結果 if(!empty($this->request->data['User'])){ $this->User->set($this->request->data); if($this->User->validates()){ //エラーがなければ $this->User->save($this->request->data); }else{ $this->render('index'); } } } } |
2.モデルにvalidateを設定
次に重要なモデルです. モデルには$validateというプロパティを作成し,そこにフィールド名とルールを記述します.下記例ではname,email,passwordフィールドに対して,ルール設定しています.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php class User extends Model{ public $name = 'User'; public $validate = array( 'name' => array( 'rule' => array('between',0,10), 'required' => true, 'alloEmpty' => false, 'message' => '10文字以内で必ず入力して下さい' ), 'email' => array( 'rule' => 'email', 'required' => true, 'alloEmpty' => false, 'message' => 'メールアドレスの形式で必ず入力して下さい' ), 'password' => array( 'rule' => 'alphaNumeric', 'required' => true, 'alloEmpty' => false, 'message' => '必ず入力して下さい' ) ); |
- rule : バリデーションルールを記述します.(参考: CakePHPのバリデーションルールまとめ | asklife )
- 例1 alphaNumeric: 英数字のみ
- 例2 email: メールアドレスのみ
- 例3 between: 文字数指定
- required : 必須項目かどうか(true: 必須項目, false: 必須項目ではない)
- alloEmpty : 空ポストを許すかどうか
- message : 失敗したときのメッセージ
※この他にも指定の仕方はいくつかあります.
3. ビューの作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<?php echo $this->Html->tag('h2','ユーザー登録フォーム'); ?> <!-- フォーム開始 --> <?php echo $this->Form->create('User', array( 'type' => 'post', 'url' => 'result' )); ?> <?php echo $this->Form->input('User.name',array( 'label' => "名前")); ?> <?php //echo $this->Form->error('User.name'); ?> <?php echo $this->Form->input('User.email',array( 'label' => "メール")); ?> <?php //echo $this->Form->error('User.email'); ?> <!-- ラジオボタン --> <?php $option = array(0 => '男', 1 => '女'); ?> <?php $option2 = array('legend' => false, 'value' => 1);?> <?php echo $this->Form->label('User.sex','性別'); ?> <?php echo $this->Form->radio('User.sex',$option,$option2); ?> <?php //echo $this->Form->error('User.sex'); ?> <!-- パスワード --> <?php echo $this->Form->label('User.password','パスワード'); ?> <?php echo $this->Form->password('User.password'); ?> <?php //echo $this->Form->error('User.password'); ?> <!-- 送信ボタン --> <?php echo $this->Form->submit(); ?> <!-- フォーム終了 --> <?php echo $this->Form->end(); ?> <p>登録ユーザ</p> <table class="table"><tbody> <tr> <th>名前</th> <th>メール</th> <th>登録時間</th> </tr> <?php if(!empty($data)): ?> <?php foreach ($data as $key => $value): ?> <tr> <td><?php echo $value['User']['name']; ?></td> <td><?php echo $value['User']['email']; ?></td> <td><?php echo $value['User']['created']; ?></td> </tr> <?php endforeach; ?> <?php endif; ?> </tbody></table> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php if(!empty($data)): ?> <?php echo $this->Html->tag('h2','この情報で登録して大丈夫ですか?'); ?> 名前: <?php echo $data['User']['firstname']; ?> <?php echo $data['User']['lastname']; ?> <?php echo $this->Html->tag('br'); ?> 性別: <?php echo $data['User']['sex']; ?> <?php echo $this->Html->tag('br'); ?> 学年: <?php echo $data['User']['grade']; ?> <?php echo $this->Html->tag('br'); ?> 好きなもの: <?php foreach($data['User']['like'] as $key => $value):?> <?php echo $value; ?> <?php endforeach; ?> <?php echo $this->Html->tag('br'); ?> コメント: <?php echo $data['User']['comment']; ?> <?php echo $this->Html->tag('br'); ?> パスワード: <?php echo $data['User']['password']; ?> <?php echo $this->Html->tag('br'); ?> 登録時間: <?php echo $data['User']['time']; ?> <?php echo $this->Html->tag('br'); ?> <?php echo $this->Form->create('Submit', array( 'type' => 'post', 'url' => 'result' )); ?> <?php echo $this->Form->submit('登録'); ?> <?php else: ?> <?php echo $this->Html->tag('h2','登録完了しました.ありがとうございました.'); ?> <?php echo $this->Html->link('最初に戻る','index'); ?> <?php endif; ?> |
4.アクセスしてみる
入力してみて,ルールに適さない内容で入力してみましょう.指定したメッセージが表示され,データベースに入力内容が登録されていなければ正しくバリデート処理が行われています.