Php 如何在yii中创建客户端自定义规则
我想在Yii中使用重置密码功能。为此,我有4个字段,即email、currentPassword、newPassword、newPasswordRepeat 我在我的模型中使用了以下规则Php 如何在yii中创建客户端自定义规则,php,yii,yii-extensions,Php,Yii,Yii Extensions,我想在Yii中使用重置密码功能。为此,我有4个字段,即email、currentPassword、newPassword、newPasswordRepeat 我在我的模型中使用了以下规则 array('email, currentPassword, newPassword, newPasswordRepeat', 'required'), array('newPasswordRepeat', 'compare', 'compareAttribute'=>'newPasswor
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.');
}
此规则在服务器端给出错误,即当我单击Submit按钮时,页面被重新加载,然后显示错误
我想在客户端像其他错误一样显示错误
我在表单中启用了客户端验证
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'contact-form',
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
)); ?>
尝试更改
$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,
),
)); ?>
最好的方法是扩展CValidator类。在其中,您可以覆盖两个方法validateAttribute和clientValidateAttribute。你需要的是第二个clientValidateAttribute。确保您已启用客户端验证
'enableClientValidation'=>true,
样本:
class MyValidation extends CValidator
{
protected function validateAttribute($object,$attribute)
{
//TODO: server side validation
}
public function clientValidateAttribute($object,$attribute)
{
//TODO: client side javascript
}
}
'enableClientValidation'=>true,
class MyValidation extends CValidator
{
protected function validateAttribute($object,$attribute)
{
//TODO: server side validation
}
public function clientValidateAttribute($object,$attribute)
{
//TODO: client side javascript
}
}