Как логически сравнить значения полей значений (чисел) в валидации 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

Решение

Вы не можете использовать встроенный comparison Правило для сравнения двух полей, вам нужно использовать пользовательское правило:

$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.'
]);
5

Другие решения

Вы можете использовать метод 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.'
]);
1