Опции проверки даты ZF3 - PullRequest
0 голосов
/ 15 января 2020

Я хочу проверить дату в классе формы в ZF3, когда я делаю это таким образом, она не проверяется с данным форматом, как проверить данный формат?

$inputFilter->add([
    'name'     => 'geboortedatum',
    'required' => true,
    'options' => [
        'format' => 'D-M-Y',
    ],            
    'filters'  => [                    
        ['name' => 'StringTrim'],
    ],                
    'validators' => [
        [
            'name'    => 'Date',
        ],
    ],
]);

1 Ответ

0 голосов
/ 15 января 2020

В вашей конфигурации есть две ошибки.

Первая - это то, где вы объявляете ваши параметры валидатора (формат), которые должны быть сразу после объявления имени валидатора.

Вторая один - это формат, который вы используете. Если вы не хотите представлять даты как " СР-Янв-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
...