バリデーション【CakePHP2.5】
CakePHPのバリデーションに関するメモ
コントローラにてvalidateを行いたい場合の実装方法です.
Userというモデルがあると仮定しています.
テーブル名:Users
カラム
・name(名前)
・tel(電話番号)
(メモであるため、簡略的に作っています)
使い方
1)ビュー側の実装
フォームを作成します.
test.ctp
// 入力フォームの作成 <?php echo $this->Form->create('User', array( 'type' => 'post', 'url' => 'test', 'novalidate' => true, // HTML5でのバリデーション機能の無効 )); ?> <?php echo $this->Form->input('name', array( 'label' => 'name', 'type' => 'text', )); ?> <?php echo $this->Form->input('tel', array( 'label' => false, // falseにするとlabelが作成されません 'type' => 'tel', )); ?> <?php $options = array( 'label' => 'next', ); echo $this->Form->end($options); ?>
2)コントローラ側の実装
だいぶ適当です.
ビューのtest.ctpにてsubmitボタンが押された場合,このコントローラにて処理が行われるようにしています.
<?php App::users('AppController', 'Controller'); class UsersController extends AppController { public function test() { if ($this->request->is('post')) { // モデルにpostされたデータをセット $this->User->set($this->request->data); if ($this->User->validates()) { // バリデートが成功した場合 } else { // 失敗した場合 } } } }
コントローラでバリデートを行う際に使用するのは,「validates()」です.
ちなみに「validate()」を使用すると,モデルにて設定しているバリデーションの条件の配列が返されます.
3)モデル側の実装
<?php App::uses('AppModel', 'Model'); class User extends AppModel { public $validate = array( // 2つの条件を設ける場合 'name' => array( 'notEmpty' => array( 'rule' => 'notEmpty', 'message' => 'required' ), 'between' => array( 'rule' => array('between', 1, 20), 'message' => '20文字以内で入力してください', ), ), // 条件1つのみの場合 'tel' => array( 'rule' => 'numeric', 'message' => '数字を入力してください', ), ); }
ここでnameやtelで指定しているのですが,これはviewのinputで指定している名前になります.
よくわからないですが,以下のようにviewのinputに別のnameを与えてもvalidateを行えます.
<?php echo $this->Form->input('name', array( 'label' => 'name', 'type' => 'text', 'name' => 'hoge', )); ?>
また他のモデルを使用するために,以下のようにドット記法を使用してもvalidateが行えるようでした.
<?php echo $this->Form->input('Post.name', array( 'label' => 'name', 'type' => 'text', 'name' => 'hoge', )); ?>
以上が簡単なメモになります.