【问题标题】:How to logically compare values (numbers) field values in CakePHP 3 validation如何在 CakePHP 3 验证中逻辑比较值(数字)字段值
【发布时间】:2015-10-18 18:15:05
【问题描述】:

我正在尝试使用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;
}

我们将不胜感激。

【问题讨论】:

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


【解决方案1】:

您不能使用内置的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.'
]);

【讨论】:

  • 感谢您的回答。在这种情况下,什么是 $value?或者它来自哪里?
  • 这是 cake 指定的标准规则形式:$value 是目标字段的值,而 $context 包含验证上下文(以及所有数据)。
【解决方案2】:

您可以使用 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.'
    ]);

【讨论】:

    猜你喜欢
    • 2015-05-01
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 2018-03-24
    • 2017-12-07
    • 1970-01-01
    相关资源
    最近更新 更多