2016-09-26 66 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验证工程。希望它有帮助