Yii条件性验证

ktca8awb  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(165)

我有一个关于Yii验证的问题。我有一个下拉菜单,它的选项是Y和N。如果用户选择Y,用户必须解释为什么他选择Y,因此一个textArea框将成为必需的。
我的规则代码如下所示。
array('explain', 'check', 'trigger'=>'med_effects'),
Check是我用于验证的函数

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

  • 谢谢-谢谢
w7t8yxp5

w7t8yxp51#

在模型中创建属性:

public $isDropDownChecked;

在您的视图中,创建一个连接到新创建的属性的下拉列表。
并在rules()方法中返回一个规则数组,如下所示:

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

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

   return $rules;
}
xu3bshqb

xu3bshqb2#

这也可能对Yii1上的用户有所帮助,比如说你有三个字段的查询都是[Yes| NO],并且您希望至少有一个字段选择为“是
这是您的模型的解决方案添加

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);
        }
    }

相关问题