Поле формы проверки CakePHP

1

Я использую Cakephp (v3.0). У меня есть поле "num_max_intents", которое я хочу, чтобы принимать значения больше 0, а также я хочу, чтобы поле "дата" было больше фактической даты. Мой код validationDefault() следующий:

public function validationDefault(Validator $validator){
    $validator->notEmpty('num_max_intents')
              ->notEmpty('package')
              ->notEmpty('date');
    return $validator;
}

Какой самый простой способ сделать это?

Теги:
validation
forms
cakephp

3 ответа

1
Лучший ответ

Для простого решения используйте валидатор range:

$validator->add(
    'num_max_intents', 
    'valid', 
    ['rule' => ['range', 0, PHP_INT_MAX]]
);

Этот валидатор требует установки как нижнего, так и верхнего пределов, поэтому здесь вы должны использовать некоторое значение. Вы можете найти все валидаторы в Cake\Validation\Validation.

0

Чтобы проверить поле "дата", я использую этот код:

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

Но когда я выбираю дату, меньшую, чем фактическая дата в моей форме, валидатор работает неправильно и не показывает сообщение об ошибке... Что не так?

0

Вы можете использовать закрытие в качестве настраиваемого правила валидации. Просто не забудьте вернуть true если правило проверяет и false если оно терпит неудачу. Например, чтобы проверить поле даты больше текущей даты:

public function validationDefault(Validator $validator){
    $validator
        ->add('date', 'valid', ['rule' => function ($value) {
            return $value > date('Y-m-d');
        }]);
    return $validator;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню