2011-07-14 72 views
2

我有一个关于Yii验证的问题。我有一个下拉菜单,其选项是Y和N.如果用户选择Y,用户必须解释他为什么选择Y,因此textArea框将变为必需。Yii有条件验证

我的规则代码如下。

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也不会改变。我如何确定用户选择表单时选择了哪个选项?

谢谢。

回答

3

模型内创建一个属性:

public $isDropDownChecked; 

在你看来,创建连接到创建的新物业下拉。

,并返回方法的规则()这样的内部规则阵列:

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

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


    return $rules; 
} 
+0

我对如何,这将帮助我,因为这不是我在问什么毫无头绪。 – Koralarts

+0

当我遇到这种情况时,我在模型中插入了下拉值,并在我的规则方法中检查了是否($ this-> property =='Y')$ rules [] = array(....)/ /验证原因。它的作品,不是吗? – armandomiani

+0

所以当你第一次创建模型的实例时,你传入了一个变量? '新模型($ something)'? – Koralarts