会員制サイトの会員登録画面では、ユーザにパスワードを2度入力させることで入力ミスを防止するUIを使うのが普通だ。
CakePHPでは、独自メソッドによるバリデーションの仕組みを使うことで、入力された2つのパスワードの一致を容易にチェックすることができる。
以下覚え書き的サンプル。
モデル
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 |
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]); } } |
ビュー
1 2 3 4 5 6 7 8 9 10 |
<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('登録'); ?> |