【问题标题】:Yii Conditional ValidationYii 条件验证
【发布时间】:2011-07-14 21:25:23
【问题描述】:

我有一个关于 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 也不会改变。我应该如何确定用户在提交表单时选择了哪个选项?

谢谢。

【问题讨论】:

    标签: php forms validation yii


    【解决方案1】:

    在模型中创建一个属性:

    public $isDropDownChecked;
    

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

    并在方法 rules() 中返回一个规则数组,如下所示:

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

    【讨论】:

    • 我不知道这对我有什么帮助,因为这不是我要问的。
    • 当我遇到这种情况时,我在模型中插入了下拉值,并在我的规则方法中检查了 if ($this->property == 'Y') $rules[] = array (.... ) //验证原因。它有效,不是吗?
    • 那么你在第一次创建模型实例时传入了一个变量? new Model($something)?
    • 只需在其中创建一个属性。公共 $isDropDownChecked;创建连接到模型属性的下拉列表并在 rules() 方法中使用它。
    • 好的,谢谢。我工作。我只是以相反的方式做,以适应我打算做的事情。
    【解决方案2】:

    这也可能对 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);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 2015-07-23
      • 1970-01-01
      • 2011-02-25
      相关资源
      最近更新 更多