2016-09-26 2 views
0

Привет, у меня есть Model и модель permisssion. В пользовательской форме есть 2 поля надзора и города. В таблице разрешений i установите 1 для required и 0 для необязательных.Проверка Yii во время выполнения?

как

Permission table 

user_role  supervisor  city 
1     1    1 
2     1    0 
3     0    0 

Теперь я хочу, когда я выбираю роль в пользователе формирует город и супервизор если 1, то необходимые правила устанавливают активными для этого USER_ROLE

<div class="form"> 

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'lms-user-form', 
    'enableAjaxValidation'=>true, 
)); ?> 

    <p class="note">Fields with <span class="required">*</span> are required.</p> 

    <?php echo $form->errorSummary($model); ?> 
<div class="row"> 
     <?php echo $form->labelEx($model,'user_role'); ?> 
     <?php echo $form->drodownList($model,'user_role',array(); ?> 
     <?php echo $form->error($model,'user_role'); ?> 
    </div> 
    <div class="row"> 
     <?php echo $form->labelEx($model,'user_first_name'); ?> 
     <?php echo $form->textField($model,'user_first_name',array('size'=>40,'maxlength'=>40)); ?> 
     <?php echo $form->error($model,'user_first_name'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'user_last_name'); ?> 
     <?php echo $form->textField($model,'user_last_name',array('size'=>40,'maxlength'=>40)); ?> 
     <?php echo $form->error($model,'user_last_name'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'user_password'); ?> 
     <?php echo $form->textField($model,'user_password',array('size'=>40,'maxlength'=>40)); ?> 
     <?php echo $form->error($model,'user_password'); ?> 
    </div> 

    <div class="row"> 
     <?php echo $form->labelEx($model,'user_city'); ?> 
     <?php echo $form->textField($model,'user_city',array('size'=>10,'maxlength'=>10)); ?> 
     <?php echo $form->error($model,'user_city'); ?> 
    </div> 
<div class="row"> 
     <?php echo $form->labelEx($model,'user_supervisor'); ?> 
     <?php echo $form->textField($model,'user_supervisor',array('size'=>10,'maxlength'=>10)); ?> 
     <?php echo $form->error($model,'user_supervisor'); ?> 
    </div> 

    <div class="row buttons"> 
     <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?> 
    </div> 

<?php $this->endWidget(); ?> 

</div><!-- form --> 

я использовал что-то вроде этого, но это не работает

$permiss = Permission::model->findByAttributes(array('user_role'=>$model=>user_role)); 

    if($permiss->user_city && $permiss->user_supervisor){ 

    $model->rules(array('user_city','user_supervisor','required')); 
    } 
    elseif($permiss->user_city) 
    { 

    $model->rules(array('user_city','required')); 
    } 
elseif($permiss->user_supervisor) 
    { 

    $model->rules(array('user_supervisor','required')); 
    } 

Я знаю о addError, но я хочу ajax validation

ответ

0

Почему вы не используете специальную проверку?

Вы должны попробовать это для своей проблемы.

Вариант 1:

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

И в вашем использовании действия это один

$this->performAjaxValidation($model); 

Вариант 2:

Добавить как указано выше, и пользовательские проверки:

array('user_role', 'customValidation'), 

public function customValidation($attribute, $params) 
    { 
     $user_role = $this->attributes['user_role']; 
     $permiss = Permission::model()->findByAttributes(array('user_role' => $user_role)); 
     if ($permiss->user_city && $permiss->user_supervisor) { 
      if ($this->user_city == '') { 
       $this->addError('user_city', "User city cannot be blank."); 
      } 
      if ($this->user_supervisor == '') { 
       $this->addError('user_supervisor', 
        "User supervisor cannot be blank."); 
      } 
     } else if ($permiss->user_city) { 
      if ($this->user_city == '') { 
       $this->addError('user_city', "User city cannot be blank."); 
      } 
     } elseif ($permiss->user_supervisor) { 
      if ($this->user_supervisor == '') { 
       $this->addError('user_supervisor', 
        "User supervisor cannot be blank."); 
      } 
     } 
    } 

И еще одна вещь, которую вы ed для добавления имени формы в performAjaxValidation ($ model) method.so, что он работает только.

В обоих направлениях работает проверка ajax. надеюсь, что это поможет

Смежные вопросы