2016-09-26 67 views
0

嗨有一個用戶Model和一個permisssion模型。用戶形式有2個領域的主管和城市。在權限表中,我爲required設置了1,對於非必需的設置爲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."); 
      } 
     } 
    } 

而且你還有一件事編輯在performAjaxValidation($ model) method.so中添加表單名稱,以使其僅工作。

在這兩種方式ajax驗證工程。希望它有幫助