[CakePHP]手動でフォームのバリデーションチェックにかける

最近cakephpを触るようになりました。ようやく。
で、コントローラーから明示的にバリデーションにかける方法を調べたのでメモ。

まず準備として、Modelにルールを記述します。
今回はUserというモデル内に記述したとします。

1
2
3
4
5
6
var $validate = array(
  'password' => array(
        'rule' => array('minLength', 8),
        'message' => 'パスワードは8文字以上で入力してください'
    )
);

で、次にViewで入力欄を作成します。
作成の際に、先程作ったルールのpasswordtypeとして指定してやります。

<?php echo $this->Form->input('User.password', array('type' => 'password', 'value' => '','label' => false)); ?>

HTMLは以下のように表示されます。

<input name="data[User][password]" value="" type="password" id="UserPassword" required="required">

最後にControllerからバリデーションにデータを送信します。
記述する箇所は、フォームを送信した後に実行されるアクション内です。

1
2
3
4
$this->User->set($this->request->data); //モデルにデータをセット
if(!$this->User->validates()){
  //エラー時の挙動
}

これで8文字以下で送信するとエラーが表示されます。

参考

http://book.cakephp.org/2.0/ja/models/data-validation/validating-data-from-the-controller.html

   このエントリーをはてなブックマークに追加