Yii条件验证

时间:2011-07-14 21:25:23

标签: php forms validation yii

我对Yii验证有疑问。我有一个下拉列表,其选项为Y和N.如果用户选择Y,用户必须解释他选择Y的原因,因此需要textArea框。

我的规则代码如下所示。

array('explain', 'check', 'trigger'=>'med_effects'),

检查是我用于验证的功能

public function check($attribute, $params)
    {
        if($this->$params['trigger'] == 0 && $this->$attribute == '') {
            $this->addError($attribute, 'Explain the effects of the medicine');
        }
    }

$this->$params['trigger']的值不会改变。我假设因为保存的值为0(Y)并且即使用户选择N也不会改变。我如何确定用户在对表格求和时选择了哪个选项?

感谢。

2 个答案:

答案 0 :(得分:4)

在模型中创建一个属性:

public $isDropDownChecked;

在您的视图中,创建一个连接到新属性的下拉列表。

并在方法规则()中返回一系列规则,如下所示:

public function rules()
{
   $rules[] = array(); 

   if ($this->isDropDownChecked == 'Y')
        $rules[] = array('explain', 'check', 'trigger'=>'med_effects');    


   return $rules;
}

答案 1 :(得分:0)

这也可能对 Yii1 上的某人有所帮助, 假设您有三个字段的 [Yes|NO] 查找,并且您希望至少选择一个字段为 Yes

这是解决方案 在您的模型上添加

public $arv_refill;
public $prep_refilled;
public $prep_initiate;

在你的规则上添加

public function rules()
{
    return array(
   array('arv_refill,prep_refilled,prep_initiate','arvPrepInitiateValidation'),
    );
 }

arvPrepInitiateValidation 是一个函数

public function arvPrepInitiateValidation($attribute_name,$params)
    {
        
        if($this->arv_refill != 1 && $this->prep_refilled != 1 && $this->prep_initiate != 1){
            $msg = "arv_refill, prep_refilled or prep_initiate field must have one field as Yes";
            $this->addError('arv_refill',$msg);
            $this->addError('prep_refilled',$msg);
            $this->addError('prep_initiate',$msg);
        }
    }