【问题标题】:Yii ConditionalValidator Not WorkingYii ConditionalValidator 不工作
【发布时间】:2013-11-22 18:09:25
【问题描述】:

我试图将一个字段设置为仅当另一个字段选择的值不等于 11 时才需要。 这个例子我试过了

array('role', 'ext.YiiConditionalValidator',
                        'if' => array(
                            array('role', 'compare', 'compareValue'=>"11"),
                        ),
                        'then' => array(
                            array('company_id', 'required'),
                        ),
                    ),
                    ),

我尝试下载新的 ConditionalValidator。

甚至尝试了自定义条件:

public function checkEndDate($attributes,$params)
{


         $this->addError('company_id','Error Message');

}
    public function rules() { 

      return array( 
    array('company_id', 'checkEndDate') 
     ); 
   }

但这一切都显示错误。有什么简单的方法可以解决这个问题吗?

【问题讨论】:

  • 如您所定义,当角色等于 11 时,需要 company_id。你的目的是错误的:“我试图将一个字段设置为仅当另一个字段选择的值不等于 11 时才需要”

标签: php yii yii-extensions


【解决方案1】:

为什么不使用场景?如果您使用“customer_type=active”创建/编辑模型,您可以在特殊情况下手动创建它:

$model = new MyModel(MyModel::SCENARIO_ACTIVE);

然后定义你的规则,包括场景:

array('birthdate, city', 'required', 'on' => MyModel::SCENARIO_ACTIVE),
array('city', 'in', 'range' => array("sao_paulo", "sumare", "jacarezinho"), 'on' => MyModel::SCENARIO_ACTIVE)

如果您不喜欢这种方式,您总是可以非常简单地创建自己的验证器。

在规则中:

array('customer_type', 'myCustomValidator'),

在模型类中:

function myCustomValidator(){
   if($this->customer_type == 'active'){
      ...
      if($error){
         $this->addError(...);
      }
   }
}

【讨论】:

  • 请再次阅读我的问题。我确实编辑了它。我尝试过的第二种方式失败了。第一个看不懂。你能解释一下吗?
  • 我在您的验证器 (checkEndDate) 中没有看到任何检查。它只是总是增加错误。
  • 即使没有任何检查,我的函数也不会添加错误。这就是问题所在。
  • 那你做错了。您可以将整个模型的代码发送给我,也可以将您的控制器部分发送给我,您可以在其中调用模型。
猜你喜欢
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多