Hap*_*ppy 6 php yii yii-extensions
我想在Yii中使用重置密码功能.为此,我有4个字段,即email,currentPassword,newPassword,newPasswordRepeat.
我在我的模型中使用了以下规则
array('email, currentPassword, newPassword, newPasswordRepeat', 'required'),
array('newPasswordRepeat', 'compare', 'compareAttribute'=>'newPassword'),
array('currentPassword', 'equalPasswords'),
Run Code Online (Sandbox Code Playgroud)
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.');
}
Run Code Online (Sandbox Code Playgroud)
此规则在服务器端出错,即当我单击"提交"按钮时,页面将重新加载,然后显示错误.
我想像其他错误一样在客户端显示错误.
我已经在表单中启用了客户端验证.
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'contact-form',
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
)); ?>
Run Code Online (Sandbox Code Playgroud)
尝试改变
$this->addError($currentPassword, 'Old password is incorrect.');
Run Code Online (Sandbox Code Playgroud)
到
$this->addError('currentPassword', 'Old password is incorrect.');
Run Code Online (Sandbox Code Playgroud)
编辑:
此外,您还需要 AJAX 验证:
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'contact-form',
'enableClientValidation'=>true, 'enableAjaxValidation' => true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
)); ?>
Run Code Online (Sandbox Code Playgroud)
在你的控制器操作之上:
if (array_key_exists('ajax', $_POST) && $_POST['ajax'] === 'contact-form') {
echo CActiveForm::validate($model);
Yii::app()->end();
}
Run Code Online (Sandbox Code Playgroud)