6

Yii でパスワードのリセット機能を使用したいと考えています。そのために、email、currentPassword、newPassword、newPasswordRepeat の 4 つのフィールドがあります。

モデルで次のルールを使用しました

array('email, currentPassword, newPassword, newPasswordRepeat', 'required'),
       array('newPasswordRepeat', 'compare', 'compareAttribute'=>'newPassword'),
        array('currentPassword', 'equalPasswords'),

パスワードが元のパスワードと一致するequalPasswordsかどうかをチェックするユーザー定義のルールはどこにありますか。currentPassword

public function equalPasswords($currentPassword)
{
    $oDbConnection = Yii::app()->db;
    $oCommand = $oDbConnection->createCommand('SELECT * FROM Superadmin_details where email=:email');
    $oCommand->bindParam(':email', Yii::app()->session['email'],PDO::PARAM_STR);
    $user=$oCDbDataReader = $oCommand->queryRow();

    if ($user['password'] != $currentPassword)

    $this->addError($currentPassword, 'Old password is incorrect.');
}

このルールにより、サーバー側でエラーが発生します。つまり、[送信] ボタンをクリックすると、ページがリロードされてエラーが表示されます。

他のエラーと同じようにクライアント側にエラーを表示したい。

そして、フォームでクライアント側の検証を有効にしました。

<?php $form=$this->beginWidget('CActiveForm', array(
      'id'=>'contact-form',
      'enableClientValidation'=>true,

      'clientOptions'=>array(
          'validateOnSubmit'=>true,
      ),
)); ?>
4

2 に答える 2

0

変更してみる

$this->addError($currentPassword, 'Old password is incorrect.');

$this->addError('currentPassword', 'Old password is incorrect.');

編集:

また、AJAX 検証が必要です。

<?php $form=$this->beginWidget('CActiveForm', array(
      'id'=>'contact-form',
      'enableClientValidation'=>true, 'enableAjaxValidation' => true,
      'clientOptions'=>array(
          'validateOnSubmit'=>true,
      ),
)); ?>

そしてコントローラーアクションの上に:

if (array_key_exists('ajax', $_POST) && $_POST['ajax'] === 'contact-form') {
        echo CActiveForm::validate($model);
        Yii::app()->end();
}
于 2013-09-19T09:35:38.263 に答える