Cakephp 自定义验证规则不适用

Cakephp 自定义验证规则不适用,cakephp,cakephp-2.4,Cakephp,Cakephp 2.4,我想在模型中添加一个自定义验证规则,检查两个字段中是否至少有一个不是空的。为了简单起见,我将验证简化为 public $validate = array( 'first' => array( 'oneEmpty' => array( 'rule' => array('maxOneEmpty', 'second'), 'message' => 'At least one must be filled'

我想在模型中添加一个自定义验证规则,检查两个字段中是否至少有一个不是空的。为了简单起见,我将验证简化为

public $validate = array(
    'first' => array(
        'oneEmpty' => array(
            'rule' => array('maxOneEmpty', 'second'),
            'message' => 'At least one must be filled'
        )
    ),
    'second' => array(
        'oneEmpty' => array(
            'rule' => array('maxOneEmpty', 'first'),
            'message' => 'At least one must be filled'
        )
    )
还有其他的验证,这些都可以很好地工作(不过,这些验证都不依赖于另一个字段)。现在,这不能验证。我甚至将自定义函数修改为

public function maxOneEmpty($check, $notEmptyToo) {
    return false;
}
没有运气。如果我试图保存模型(故意进行错误的验证,这样它实际上就不会保存),我在控制器中执行
$this->model->validationErrors
时会得到这个结果

Array
(
    [House] => Array
        (
            [third] => Array
                (
                    [0] => Enter a valid option
                )
        )
)
显然,第一个和第二个也应该是错误。因此,模型正在验证,而不是那些字段

如果我没有在
first
second
字段中输入任何值,就会发生这种情况。如果我在
first
字段中添加了任何内容,它将验证自定义函数(由于返回,因此为false)。但这对我没有用处,我需要能够检查是否至少有一个字段有值,但如果两个字段都为空(并且当实际验证返回false时),它甚至不会尝试验证。我尝试将
required=>true
添加到规则中,但没有成功。添加
allowEmpty=>false是没有意义的,所以我甚至没有尝试过

我能想到的另一个选项是添加一个函数,在保存之前在模型的
中检查“validation”,但我希望能够使用validations来完成这项工作(因此,我不必像我希望的那样干扰validations数组来输出错误消息)

我不知道我做错了什么。。。我正在使用
saveAll
保存两个模型,但即使我执行一个简单的
save
,问题仍然存在。正在生成的已发布表单的结果数组

Array
(
    [House] => Array
        (
            [first] => 
            [second] => 
            [third] => t
        )
)
万一有什么帮助的话。不确定这里还有什么有用的信息,但请告诉我。提前谢谢


(使用cakephp 2.4.4)

设置
required=>true
仅表示数组键必须存在;它根本不检查值

请尝试以下代码:

public $validate = array(
    'first' => array(
        'oneEmpty' => array(
            'rule' => array('maxOneEmpty'),
         'message' => 'At least one must be filled'
        )
    ),
    'second' => array(
        'oneEmpty' => array(
            'rule' => array('maxOneEmpty'),
            'message' => 'At least one must be filled'
        )
    )
);

public function maxOneEmpty() {
    if ((empty($this->data['Model']['first'])) && (empty($this->data['Model']['second']))) {
        return false;
    } else {
        return true;
    }
}

谢谢你的回答。不幸的是,它不起作用,当
第一个
第二个
为空时,它仍然无法验证:(虽然删除函数中的变量可能会起作用,即使它使其无法重新使用,但不,相同的结果…奇怪。我只是在我的网站上测试了它,它工作得很好(在我更正括号以匹配上面的编辑之后)。将
第一个
第二个
留空将导致出现一条错误消息,提示“必须至少填写一个”在这两个字段上。填写任何一个都可以验证表单。我觉得这也很奇怪,这就是为什么我发布了这个问题。你的答案看起来不错,我认为它可以工作,但没有…我缺少配置吗?我不认为是,但是可能?如果我得到更多关于这个问题的信息,我会更新这个问题。。。