我想在模型中添加自定义验证规则,以检查两个字段中是否至少有一个不为空。为简单起见,我减少了对此
的验证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
和second
字段上添加任何值,就会发生这种情况。如果我在first
字段上放置任何内容,它会验证自定义函数(因为返回而给我错误)。但是这对我没用,我需要能够检查至少有一个字段是否有值,但是如果两个字段都是空的(当实际验证应该返回false时)它甚至不会尝试验证。我已经尝试将required => true
添加到规则中,但没有运气。添加allowEmpty => false
没有意义,所以我甚至没有尝试过。
我能想到的另一个选择是在模型beforeSave
中添加一个检查“验证”的函数,但我希望能够通过验证来实现(所以我没有混淆验证数组以输出错误消息,就像我想要的那样。)
我不确定我做错了什么......我用saveAll
保存了两个模型,但即使我做了一个简单的save
,问题仍然存在。结果表单的结果数组为
Array
(
[House] => Array
(
[first] =>
[second] =>
[third] => t
)
)
万一有任何帮助。不知道其他信息在这里有用,但请告诉我。提前谢谢。
(使用cakephp 2.4.4)
答案 0 :(得分:1)
设置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;
}
}