Я использую Cakephp (v3.0). У меня есть поле "num_max_intents", которое я хочу, чтобы принимать значения больше 0, а также я хочу, чтобы поле "дата" было больше фактической даты. Мой код validationDefault() следующий:
public function validationDefault(Validator $validator){
$validator->notEmpty('num_max_intents')
->notEmpty('package')
->notEmpty('date');
return $validator;
}
Какой самый простой способ сделать это?
Для простого решения используйте валидатор range
:
$validator->add(
'num_max_intents',
'valid',
['rule' => ['range', 0, PHP_INT_MAX]]
);
Этот валидатор требует установки как нижнего, так и верхнего пределов, поэтому здесь вы должны использовать некоторое значение. Вы можете найти все валидаторы в Cake\Validation\Validation
.
Чтобы проверить поле "дата", я использую этот код:
public function validationDefault(Validator $validator){
$validator->add('date',
'valid', [
'rule' => function ($value) {
return $value > date('Y-m-d'); },
'message' => 'Invalid date.'
]
)
->notEmpty('date');
return $validator;
}
Но когда я выбираю дату, меньшую, чем фактическая дата в моей форме, валидатор работает неправильно и не показывает сообщение об ошибке... Что не так?
Вы можете использовать закрытие в качестве настраиваемого правила валидации. Просто не забудьте вернуть true
если правило проверяет и false
если оно терпит неудачу. Например, чтобы проверить поле даты больше текущей даты:
public function validationDefault(Validator $validator){
$validator
->add('date', 'valid', ['rule' => function ($value) {
return $value > date('Y-m-d');
}]);
return $validator;
}