参考にさせて頂いたページ
バリデーションを使おう!(2/5):初心者のためのCakePHP2.0 プログラミング入門
データバリデーション — CakePHP Cookbook 2.x ドキュメント
ホストマシン環境
ゲストマシン環境
- PHP 5.3.3
- CentOS release 6.6 (Final)
- cakephp2.5.6
- mysql Ver 14.14 Distrib 5.6.21, for Linux (x86_64) using EditLine wrapper
- Apache/2.2.15 (Unix)
今回使用するファイル
過去にvagrantその19-28 cakephp入門をやってみる(データを追加する)INSERT - MOTOMICHI WORKS BLOGで作成したフォームにバリデーション機能を追加するので、以下の2ファイルを編集する。
- app/Model/MySampleData.php
- app/View/MySampleDatas/add.ctp
今回編集はしないけど、以下のファイルも関連
- app/Controller/MySampleDatasController.php
http://192.168.33.10/cakephp/my_sample_datas/addで動作確認をする。
app/Model/MySampleData.phpの記述内容
参考ページにならって以下の通り
<?php
App::uses('AppModel', 'Model');
class MySampleData extends AppModel {
public $validate = array(
'name'=>'notEmpty',
'mail'=>'email',
'tel'=>'alphaNumeric'
);
}
app/View/MySampleDatas/add.ctpの記述内容
<h1>Add Page</h1>
<p>MySampleData Add Form.</p>
<?php
echo $this->Form->create('MySampleData');
?>
name:
<?php
echo $this->Form->text('name');
echo $this->Form->error('name');
?>
mail:
<?php
echo $this->Form->text('mail');
echo $this->Form->error('mail');
?>
tel:
<?php
echo $this->Form->text('tel');
echo $this->Form->error('tel');
echo $this->Form->submit("送信");
echo $this->Form->end();
?>
<table>
<?php foreach ($datas as $data): ?>
<tr>
<td><?php echo $data['MySampleData']['id']; ?></td>
<td><?php echo $data['MySampleData']['name']; ?></td>
<td><?php echo $data['MySampleData']['mail']; ?></td>
<td><?php echo $data['MySampleData']['tel']; ?></td>
</tr>
<?php endforeach; ?>
</table>
このソースについて
Modelファイルのclassの中で、以下のように配列$varidationを設定する。
$validate = array(
name属性 => バリデーションの名前 ,
name属性 => バリデーションの名前 ,
……必要なだけ続く……
}
Viewファイルの中には以下のように記述する。
echo $this->Form->error('name属性');
バリデーションを設定した要素には、デフォルトではrequired属性が付与されるので、submitしたときにブラウザに実装されたツールチップが出たりする。
バリデーションの詳細設定について
データバリデーション — CakePHP Cookbook 2.x ドキュメント
を参考に少し調べてみた。
以下のように、さらに連想配列でrule,required,messageなど他にも指定したり組み合わせたりできる様子であり、郵便番号や電話番号は国に合わせたローカライズもできるらしい。
class User extends AppModel {
public $validate = array(
'login' => array(
'alphaNumeric' => array(
'rule' => 'alphaNumeric',
'required' => true,
'message' => 'Letters and numbers only'
),
'between' => array(
'rule' => array('between', 5, 15),
'message' => 'Between 5 to 15 characters'
)
),
'password' => array(
'rule' => array('minLength', '8'),
'message' => 'Minimum 8 characters long'
),
'email' => 'email',
'born' => array(
'rule' => 'date',
'message' => 'Enter a valid date',
'allowEmpty' => true
)
);
}
今回はここまで。