В вашей конфигурации есть две ошибки.
Первая - это то, где вы объявляете ваши параметры валидатора (формат), которые должны быть сразу после объявления имени валидатора.
Вторая один - это формат, который вы используете. Если вы не хотите представлять даты как " СР-Янв-2020 " (сегодняшняя дата), правильный формат - d-m-Y
.
Согласно PHP документация , параметры формата:
| character | description | example |
|-----------|----------------------------------------------------------|------------------------|
| D | A textual representation of a day, three letters | Mon through Sun |
| M | A short textual representation of a month, three letters | Jan through Dec |
| d | Day of the month, 2 digits with leading zeros | 01 to 31 |
| m | Numeric representation of a month, with leading zeros | 01 through 12 |
| Y | A full numeric representation of a year, 4 digits | Examples: 1999 or 2003 |
Правильное объявление входного фильтра:
$inputfilter = new \Zend\InputFilter\InputFilter();
$inputfilter->add([
'name' => 'geboortedatum',
'required' => true,
'filters' => [
['name' => \Zend\Filter\StringTrim::class]
],
'validators' => [
[
'name' => \Zend\Validator\Date::class,
'options' => [
'format' => 'd-m-Y'
]
]
]
]);
$dates = [
'1977-05-23',
'23-05-1977',
'30-02-2020'
];
foreach ($dates as $date) {
$data['geboortedatum'] = $date;
$inputfilter->setData($data);
echo 'Date "' . $data['geboortedatum'] . '" is ';
if ($inputfilter->isValid()) {
echo 'valid';
} else {
echo 'invalid. Errors:'
. PHP_EOL . "\t"
. implode($inputfilter->getMessages()['geboortedatum'], PHP_EOL . "\t");
}
echo PHP_EOL;
}
Результат:
Date "1977-05-23" is invalid. Errors:
The input does not fit the date format 'd-m-Y'
The input does not appear to be a valid date
Date "23-05-1977" is valid
Date "30-02-2020" is invalid. Errors:
The input does not fit the date format 'd-m-Y'
The input does not appear to be a valid date