Нарисовалась тут такая проблема: есть форма с включенной ajax-валидацией. И вроде бы все работает: при неправильном заполнении поля появляется сообщение об ошибке. Но вот незадача, после исправления, сообщение об ошибке не пропадает. Подскажите, почему так?
Как я посмотрел, после исправления ошибки у блока row добавляется класс validating и все...
Заранее благодарю.
Контроллер:
Код: Выделить всё
<?php
/**
* Пользовательская часть модуля.
*/
class IndexController extends FrontController
{
/**
* Регистрация нового пользователя.
* @return void
*/
public function actionregistration()
{
if(!Yii::app()->user->isGuest)
$this->redirect(Yii::app()->homeUrl);
$this->_pageTitle = '';
$this->_pageDescription = '';
$this->_pageKeyWords = '';
$user = new MUser();
$user->scenario = 'registration';
$this->performAjaxValidation($user);
if(isset($_POST['MUser'])) {
die('конец');
}
$this->render('registration', array(
'user'=>$user,
));
}
/**
* Ajax валидация форм.
* @param object $model Модель, которую надо проверить
* @return void
*/
protected function performAjaxValidation($model)
{
if(isset($_POST['ajax']) && $_POST['ajax']==='user-form') {
echo CActiveForm::validate($model);
Yii::app()->end();
}
}
}
Код: Выделить всё
<?php $form = $this->beginWidget('ActiveForm', array(
'id' => 'registration',
'enableAjaxValidation' => true,
'enableClientValidation' => true,
'focus' => array($user,'login'),
'clientOptions' => array(
'validateOnSubmit' => true,
'validateOnChange' => true,
),
)); ?>
<div class="row">
<?php echo $form->errorSummary($user); ?>
</div>
<div class="row">
<?php echo $form->label($user, 'login'); ?>
<?php echo $form->textField($user, 'login'); ?>
<?php echo $form->error($user,'login'); ?>
</div>
<div class="row">
<?php echo $form->label($user, 'password'); ?>
<?php echo $form->textField($user, 'password'); ?>
<?php echo $form->error($user,'password'); ?>
</div>
<div class="row">
<?php echo $form->label($user, 'password2'); ?>
<?php echo $form->textField($user, 'password2'); ?>
<?php echo $form->error($user,'password2'); ?>
</div>
<div class="row">
<?php echo CHtml::submitButton('Зарегистрироваться'); ?>
</div>
<?php $this->endWidget(); ?>
Код: Выделить всё
public function rules()
{
return array(
array('login', 'length', 'min' => 6, 'max' => 16),
array('login', 'match', 'pattern' => '/^([A-Za-z0-9 ]+|[А-Яа-я0-9 ]+)$/u', 'message' => 'Логин содержит недопустимые символы.'),
array('password, newPassword', 'length', 'min' => 6, 'max'=>50),
array('password, newPassword', 'match', 'pattern' => '/^([A-Za-zА-Яа-я0-9]+)$/u', 'message' => 'Пароль содержит недопустимые символы.'),
array('group', 'numerical'),
array('group', 'default', 'value' => MUserGroup::getDefaultGroup()->id),
array('theme', 'in', 'range' => array('relative', 'sky')),
array('theme', 'default', 'value' => 'sky'),
array('are_delete', 'default', 'value' => 0),
array('img', 'ImageValidator', 'mime' => array('image/jpg', 'image/jpeg', 'image/png'), 'maxWidth' => 150, 'maxHeight' => 150),
// Регистрация.
array('login, password, password2, , verifyCode', 'required', 'on' => 'registration'),
array('login', 'unique', 'on' => 'registration'),
array('password2', 'compare', 'compareAttribute' => 'password', 'on' => 'registration'),
array('verifyCode', 'captcha', 'allowEmpty' => !extension_loaded('gd'), 'on' => 'registration'),
// Вход в систему.
array('login, password', 'required', 'on' => 'login'),
array('password', 'authenticate', 'on' => 'login'),
// Администрирование личных данных пользователя.
array('login', 'required', 'on' => 'adminProfile'),
array('login', 'unique', 'on' => 'adminProfile'),
// Редактирование своих личных данных.
array('newPassword2', 'compare', 'compareAttribute'=>'newPassword', 'on' => 'editProfile'),
array('oldPassword', 'checkOldPassword', 'on' => 'editProfile'),
);
}