我在一个表中有 4 个属性;num_a
, num_b
, num_c
, num_d
, 这些单独可以在 0 到 2 的范围内,例如我$validate
在模型中的属性中:
'num_a' => [
'numeric' => [
'rule' => 'numeric',
'message' => 'Please provide the number of a.',
],
'isInRange' => [
'rule' => ['range', -1, 3],
'message' => 'Must be between 0 and 2.'
],
我面临的问题是这些总和必须大于0。如果是这种情况,我希望它返回一些验证错误,例如:
'num_all' => [
'rule' => 'returnFalse',
'message' => 'There were no a, b, c or d selected.',
],
我的returnFalse
模型中有简单的功能
public function returnFalse() {
return false;
}
始终添加此规则。
在beforeValidate
我正在检查num_a
通过的总和num_d
并删除验证规则(如果$sum > 0
是这样的话):
public function beforeValidate($options=array())
{
$sum = 0;
$sum += (isset($this->data['MyModel']['num_a'])) ? $this->data['MyModel']['num_a'] : 0;
$sum += (isset($this->data['MyModel']['num_b'])) ? $this->data['MyModel']['num_b'] : 0;
$sum += (isset($this->data['MyModel']['num_c'])) ? $this->data['MyModel']['num_c'] : 0;
$sum += (isset($this->data['MyModel']['num_d'])) ? $this->data['MyModel']['num_d'] : 0;
if ($sum > 0) {
$this->validator()->remove('num_all');
}
}
但由于某种原因,我无法让它返回验证错误num_all
。
我什至尝试添加一个虚拟字段,因此验证错误可能与以下内容有关:
public $virtualFields = [
'num_all' => 'SELECT 0 FROM dual',
];
但这也不起作用。我正在使用 CakePHP v2.8。