特定条件下的必需规则

时间:2015-08-05 11:56:33

标签: yii

我需要在表单上应用规则。我有一个国家和依赖的国家下降。

我需要在州字段上应用所需的规则。

但如果我从下拉菜单中选择印度,则应从表格中删除所需的规则。

我已在cactiveform中启用了clientidevalidation true。

查看表单:

  <?php $form = $this->beginWidget('CActiveForm', array(
                    'id' => 'cart',
                    'enableAjaxValidation' => false,
                    'enableClientValidation'=>true,
                    'clientOptions'=>array('validateOnSubmit'=>true),
                    // we need the next one for transmission of files in the form.
                    'htmlOptions' => array('enctype' => 'multipart/form-data'),

                ));     
        echo $form->dropDownList($modelUser, 'country', Countries::getcountrylistwithcode(),
        array('options' => array($currentCountry=>array('selected'=>true)),
        'empty'=>'Select Country',
        'class'=>'form-control input-lg',
        ));
        echo $form->error($modelUser,'country'); 

        echo $form->labelEx($modelUser,'state',array('class'=>"col-md-30")); 


        echo $form->dropDownList($modelUser, 'state', $stateList,array('class'=>"form-control input-lg",'prompt'=>'Select State'));

        echo $form->error($modelUser,'state'); 

    $this->endWidget(); 

    ?>

模型规则是这样的:

public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        array('city,country,state,address_line_one,postcode', 'required'),

1 个答案:

答案 0 :(得分:0)

您可以通过向模型添加自定义规则来实现此目的。

将规则功能更改为此类

public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        array('city,country,address_line_one,postcode', 'required'),
        array('state', 'validateState'),
    )
}

接下来将创建自定义验证规则。这看起来像这样

public function validateState ($attribute, $params)
{
    $aCountriesWithState = array('USA');
    if (in_array($this->$attribute, $aCountriesWithState) && empty($this->$attribute))
    {
       $this->addError($attribute, 'State is missing'); 
    }
}