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