Php 验证程序调用之间的动态规则验证持久性

Php 验证程序调用之间的动态规则验证持久性,php,cakephp,cakephp-2.3,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'] == 'specia

这个问题我已经遇到过好几次了,但始终找不到解决办法,只有解决办法

假设我有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开始时清除动态规则?

有趣的问题

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

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

删除字段的所有规则。

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

另一个答案是正确的。您需要先检查规则是否存在,然后再尝试删除它,因为如果它不存在,将抛出致命错误。确定。我的意思是,当删除所有规则时,没有错误。