2015-10-18 93 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

這工作。謝謝你,霍爾特。 –