验证器调用之间的动态规则验证持久性

时间:2013-07-31 11:37:00

标签: php cakephp cakephp-2.3

我曾经多次遇到过这个问题,但却找不到解决方案,只能解决这个问题。

假设我有多个10个职位,但根据给出的答案,验证规则是不同的。

foreach($jobs as $job){

    if(!$this->Job->validates()){
        echo 'Oh no, it didn't validate';
    }

}

我发现的主要问题是我是否设置了仅由第一份作业触发的规则。

if($this->data['Job']['type'] == 'special'){
    $this->validator()->add('special_field', 'notEmpty', array(
        'rule' => array('notEmpty'),
        'message' => 'Please provide data'
    ));
}

它也适用于其他9.所以规则在调用之间是持久的。因此可以删除规则(如果存在)。

if($this->data['Job']['type'] == 'special'){
    $this->validator()->add('special_field', 'notEmpty', array(
        'rule' => array('notEmpty'),
        'message' => 'Please provide data'
    ));
}else{
    $this->validator()->remove('special_field', 'notEmpty');
}

但如果规则在尝试删除时不存在,则会抛出致命错误。

在删除规则之前是否存在检查规则的方法或者在beforeValidate开头清除动态规则的方法?

2 个答案:

答案 0 :(得分:1)

您可以使用ModelValidator::getField方法获取字段的所有规则,并使用该方法检查是否存在特定规则。 See

答案 1 :(得分:0)

有趣的问题。

我没有对此进行测试,但似乎可以使用:

$this->validator()->remove('special_field');

删除字段的所有规则。