如何在CakePHP 3验证中逻辑比较值(数字)字段值

时间:2015-10-18 18:15:05

标签: php validation cakephp cakephp-3.0 comparison-operators

我正在尝试使用comparison rule但似乎缺少某些内容或者没有正确行事。基本上我需要验证来检查 small_size 的值是否小于或等于 big_size

但这不起作用,无论大小如何,我目前都会收到错误。

表格

     ...
     $validator
        ->add('small_size', 'valid', ['rule' => 'numeric'])
        ->requirePresence('small_size', 'create')
        ->notEmpty('small_size')
        ->add('small_size', 'comparison', [
            'rule' => ['comparison', 'big_size', '<='],
            'message' => 'Small size cannot be more than the Big size.'
        ]);
    return $validator;
}

public function buildRules(RulesChecker $rules)
{
    $rules->add($rules->existsIn(['Entity_id'], 'Entity'));
    return $rules;
}

对此的一些帮助将非常感激。

2 个答案:

答案 0 :(得分:5)

您无法使用内置comparison规则来比较两个字段,您需要使用custom rule

$validator->add('small_size', 'comparison', [
    'rule' => function ($value, $context) {
        return intval($value) <= intval($context['data']['big_size']) ;
    },
    'message' => 'Small size cannot be bigger than Big size.'
]);

答案 1 :(得分:1)

您可以使用compareFields方法比较两个字段 https://api.cakephp.org/3.6/class-Cake.Validation.Validation.html#_compareFields

像:

->add('small_size', 'compareFields', [
        'rule' => ['compareFields', 'small_size','big_siz', '<='],
        'message' => 'Small size cannot be bigger than Big size.'
    ]);