端くれプログラマの備忘録 CakePHP [CakePHP] 独自メソッドによるバリデーションを使ってパスワード(再入力)の一致をチェックする

[CakePHP] 独自メソッドによるバリデーションを使ってパスワード(再入力)の一致をチェックする

会員制サイトの会員登録画面では、ユーザにパスワードを2度入力させることで入力ミスを防止するUIを使うのが普通だ。

CakePHPでは、独自メソッドによるバリデーションの仕組みを使うことで、入力された2つのパスワードの一致を容易にチェックすることができる。

以下覚え書き的サンプル。

モデル

class User extends AppModel {
    public $validate = array(
        ....
        'password' => array(
            'empty' => array(
                'rule' => 'notBlank',
                'message' => 'パスワードを入力してください',
            ),
        ),
        'password_confirm' => array(
            'compare' => array(
                'rule' => array('password_match', 'password'),
                'message' => 'パスワードが一致しません',
            ),
            'length' => array(
                'rule' => array('between', 6, 20),
                'message' => '6文字以上20文字以下のパスワードを入力してください',
            ),
            'empty' => array(
                'rule' => 'notBlank',
                'message' => 'パスワード(確認)を入力してください',
            ),
        ),
        ....
    );

    // パスワードとパスワード(再入力)の一致をチェック
    public function password_match($field, $password) {
        return ($field['password_confirm'] === $this->data[$this->name][$password]);
    }
}

ビュー

<h2>会員登録</h2>

<?php
echo $this->Form->create('User');
echo $this->Form->input('username', array('label' => 'ユーザ名'));
echo $this->Form->input('email', array('label' => 'メールアドレス'));
echo $this->Form->input('password', array('label' => 'パスワード'));
echo $this->Form->input('password_confirm', array('label' => 'パスワード(再入力)', 'type' => 'password'));
echo $this->Form->end('登録');
?>