ユーザーがアカウントのメールアドレスとパスワードを変更できるページを書いています。コントローラのアクションとビューは次のとおりです。
# UsersController.php
public function edit() {
if($this->request->is('post')) {
if($this->User->save($this->request->data)) {
$this->Session->setFlash('Your account has been updated.');
$this->redirect(array('action' => 'edit'));
}
$this->Session->setFlash('There was a problem saving your account settings. Please try again.');
}
// Auto populate form fields
if(!$this->request->data) {
$this->request->data = $this->User->find('first', array(
'conditions' => array('User.id' => $this->Auth->user('id'))
));
}
}
# edit.ctp
<?php echo $this->Form->create('User'); ?>
<?php echo $this->Form->input('currentPassword', array('between' => 'You must enter your password in order to make changes', 'type' => 'password', 'value' => '', 'autocomplete' => 'off')); ?>
<?php echo $this->Form->input('email'); ?>
<?php echo $this->Form->input('password', array('type' => 'password', 'between' => 'Must be atleast 6 characters', 'value' => '', 'autocomplete' => 'off')); ?>
<?php echo $this->Form->input('confirmPassword', array('type' => 'password', 'value' => '', 'autocomplete' => 'off')); ?>
<?php echo $this->Form->end('Save changes'); ?>
ここで、変更を加えるために、ユーザーに現在のパスワードを入力させたいと思います。これを機能させるには、検証チェックを実行して、入力したパスワードがcurrentPassword
データベースにあるパスワードと一致することを確認する必要があります。User
私のモデルの検証ルールの1つはこれです:
'currentPassword' => array(
'custom' => array(
'rule' => 'validateCurrentPassword',
'message' => 'Incorrect password. Make sure you\'re using your current password.'
)
),
および呼び出される関連関数:
public function validateCurrentPassword($data) {
debug($data);
return false;
}
これまでのところ良いですが、いくつかの本当に奇妙な振る舞いがあります。Cakeは、2ページの読み込み後にのみこのフィールドを検証するようです。たとえば、間違った値を入力して[変更を保存]を押すと、ページが更新されますが、検証エラーは表示されません。別の間違った値を入力すると、検証エラーが発生します。何らかの理由で、検証を行うためにフォームを2回送信する必要があります。
誰かがこれがなぜであるかを理解できますか?