Ajax валидация в Yii

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Ren4ik
Сообщения: 49
Зарегистрирован: 2011.10.12, 15:32

Ajax валидация в Yii

Сообщение Ren4ik »

Пытаюсь сделать Ajax валидацию, но она не срабатывает в Yii!!! подскажите, в чем проблем, что не так???
Форма

Код: Выделить всё

<h1>Регистрация</h1> 
<div class="form">
    <?php $form = $this->beginWidget('CActiveForm', array(
            'id'=>'user-form',
            'enableAjaxValidation'=>true,
    )); ?>
 
    <div class="row">
        <?php echo $form->error($model,'us_login'); ?>
        <?php echo $form->label($model, 'us_login'); ?>
        <?php echo $form->textField($model, 'us_login' )?>        
    </div>
    
    <div class="row">
        <?php echo $form->error($model,'us_meil'); ?>
        <?php echo $form->label($model, 'us_meil'); ?>
        <?php echo $form->textField($model, 'us_meil' )?>        
    </div>
 
    <div class="row">
        <?php echo $form->error($model,'us_pass'); ?>
        <?php echo $form->label($model, 'us_pass'); ?>
        <?php echo $form->passwordField($model, 'us_pass') ?>
    </div>
 
    <div class="row">
        <?php echo $form->error($model,'password2'); ?>
        <?php echo $form->label($model, 'password2'); ?>
        <?php echo $form->passwordField($model, 'password2') ?>        
    </div>
    
    <div class="row">
        <?php echo $form->label($model, 'us_rass'); ?>
        <?php echo $form->dropDownList($model,'us_rass',User::model()->rassOptions) ?>
    </div>
 
    <div class="row submit">
        <?=CHtml::submitButton('Зарегистрироваться', array('id' => "submit")); ?>
    </div>
 
    <?php $this->endWidget(); ?>
</div>
Контроллер

Код: Выделить всё

class UserController extends CController
{   
    public function actionIndex()
    {
        $this->redirect('/');
    }
    protected function performAjaxValidation($model) {
        if(isset($_POST['ajax']) && $_POST['ajax']==='user_form') {
           echo CActiveForm::validate($model);
           Yii::app()->end();
        }
    }
        
      public function actionRegistration()
     {
        var_dump($_POST);
         if (Yii::app()->user->isGuest) { 
            $model = new User; 
            /*
            * Ajax валидация
            */
            $this->performAjaxValidation($model);
 
            if(empty($_POST['User'])) {
                $this->render('registration', array('model' => $model));
 
            } else {
                 $model->attributes = $_POST['User']; 
                
                if($model->model()->count('us_login = :us_login', array(':us_login' => $model->us_login)))
                {
                    $model->addError('us_login', 'Такое имя пользователя уже занято.');
                    $this->render('registration', array('model' => $model));
                    Yii::app()->end();
                }
                if($model->validate('registration')) {                    
                    if($model->model()->count("us_login = :us_login",
                        array(':us_login' => $model->us_login))) {
 
                        $model->addError('us_login', 'Имя пользователя уже занято');
                        $this->render("registration", array('model' => $model));
 
                    } else {                       
                        if($model->save()) {
                            $role = new AuthAssignment();
                            $role->itemname = 'User';
                            $role->userid   = $model->id;
 
                            if($role->save()) {                                
                                $this->render("registration_ok"); 
                            } else {
                                throw new CHttpException(403, 'Ошибка добавления в базу данных.');
                            }
                        } else {
                            throw new CHttpException(403, 'Ошибка добавления в базу данных.');
                        }
                    }
                } else {
                    $this->render('registration', array('model' => $model));
                }
            }
        } else {            
            $this->redirect(Yii::app()->user->returnUrl);
        }                
    }
}    
Модель

Код: Выделить всё

class User extends CActiveRecord
 {        
     public $password2;
     
     public static function model($className=__CLASS__)
     {
         return parent::model($className);
     }
     
     public function tableName()
     {
         return 'user';
     }
 
     public function rules()
     {
         return array(
            array('us_login, us_pass, us_meil', 'required', 'on'=>'registration'),
            array('password2', 'compare', 'compareAttribute' => 'us_pass', 'on'=>'registration'),
 
            array('us_login, us_pass, us_meil, us_rass', 'required'),
            array('us_meil',  'match',   'pattern'    => '/^([a-z0-9_\.-]+)@([a-z0-9_\.-]+)\.([a-z\.]{2,6})$/', 'message' => 'Не верный формат e-mail адреса.'),
            array('us_login', 'match',   'pattern'    => '/^[A-Za-z0-9_-А-Яа-я\s,]+$/u','message'  => 'Логин содержит недопустимые символы.'),
 
            array('us_login', 'length',  'max' => 100, 'min' => 3),
            array('us_pass, password2', 'length',  'max' => 40,  'min' => 5),
        );
     }
     public function attributeLabels()
     {
         return array(
             'us_login' => 'Логин',
             'us_pass'  => 'Пароль',
             'password2'  => 'Повтори пароль',
         'us_meil'  => 'e-mail',
             'us_rass'  => 'выберите цифру',
         );
     }
     
     public function getRassOptions()
    {
        return array(
            1=>'1',
            2=>'2',
            3=>'3',
        4=>'4',
            5=>'5',
            6=>'6',
        );
    }    
 } 
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Ajax валидация в Yii

Сообщение slavcodev »

найди одно отличие
  1. 'id'=>'user-form'
  2. if(isset($_POST['ajax']) && $_POST['ajax']==='user_form')
Жду Yii 3!
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Ajax валидация в Yii

Сообщение slavcodev »

пжл, используйте тег code, а то глаза поломались '(
Жду Yii 3!
Ren4ik
Сообщения: 49
Зарегистрирован: 2011.10.12, 15:32

Re: Ajax валидация в Yii

Сообщение Ren4ik »

ок! спасибо за подсказку ;)
Ren4ik
Сообщения: 49
Зарегистрирован: 2011.10.12, 15:32

Re: Ajax валидация в Yii

Сообщение Ren4ik »

исправил, но все равно не валидирует!! обновляется вся страница...
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Ajax валидация в Yii

Сообщение slavcodev »

а без дампа и проверки на гостя тоже?
ЗЫ: для проверки авторизации есть accessFilter, читаем документация/рецепты, помогает.
Жду Yii 3!
Ren4ik
Сообщения: 49
Зарегистрирован: 2011.10.12, 15:32

Re: Ajax валидация в Yii

Сообщение Ren4ik »

Пробывал и без дампа, и проверки на гостя, все равно не валидирует!
maschingan
Сообщения: 75
Зарегистрирован: 2011.01.20, 23:52

Re: Ajax валидация в Yii

Сообщение maschingan »

Для валидации по сабмиту нужно добавить validateOnSubmit = true в clientOptions. По умолчанию валидация работает только по onChange. Вы смотрели в firebug-е ajax запросы вообще отправляются?
Ren4ik
Сообщения: 49
Зарегистрирован: 2011.10.12, 15:32

Re: Ajax валидация в Yii

Сообщение Ren4ik »

Да, запросы отправляются, и пробовал добавить validateOnSubmit = true в clientOptions!! с таким вариантом, при клике на кнопку, вообще нечего не происходит.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Ajax валидация в Yii

Сообщение slavcodev »

значит есть ошибки, выведи их

Код: Выделить всё

<?php $form=$this->beginWidget('CActiveForm'); ?>
 
    <?php echo $form->errorSummary($model); ?>
Жду Yii 3!
Ren4ik
Сообщения: 49
Зарегистрирован: 2011.10.12, 15:32

Re: Ajax валидация в Yii

Сообщение Ren4ik »

всем спасибо за советы!! все заработало, все настроил, и почистил кеш браузера, и все закипело)))
maschingan
Сообщения: 75
Зарегистрирован: 2011.01.20, 23:52

Re: Ajax валидация в Yii

Сообщение maschingan »

Поделитесь в чем проблема-то была? Забыли

Код: Выделить всё

<?php echo $form->error($model,'us_rass'); ?>
добавить?
Ren4ik
Сообщения: 49
Зарегистрирован: 2011.10.12, 15:32

Re: Ajax валидация в Yii

Сообщение Ren4ik »

да в общем нечего особого, просто добавил настройки

Код: Выделить всё

<?php $form = $this->beginWidget('CActiveForm', array(
            'id'=>'user-form',
            'enableAjaxValidation'=>true,
            'enableClientValidation'=>false,
            'focus'=>array($model,'us_login'),
            'clientOptions' => array(
                'validateOnSubmit' => true,
                'validateOnChange' => true,
            ),
    )); ?>
и почистил кеш браузера, впервые у меня проблемы из за кеша браузера....
Ответить