2015-10-18 97 views
1

我试图使用comparison rule,但似乎错过了某些内容或没有正确执行。基本上我需要的是验证,以检查small_size的值是否小于或等于big_size如何从逻辑上比较CakePHP 3验证中的值(数字)字段值

但是,这是行不通的,我目前正在获取错误,无论大小。

 ... 
    $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; 
} 

一些帮助在此将非常感激。

+1

作为回答@Holt,U需要看到定制验证:HTTP://书。 cakephp.org/3.0/en/core-libraries/validation.html#conditional-validation – yoyoma

回答

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.' 
]); 
+0

谢谢你的回答。在这种情况下,什么是$值?或者它从哪里来? –

+0

这是由cake指定的标准规则形式:'$ value'是目标字段的值,而'$ context'包含验证上下文(以及所有数据)。 – Holt

+0

这工作。谢谢你,霍尔特。 –