Могут ли поля формы Symfony DateType допускать альтернативные форматы?

В форме symfony4 у меня есть поле DateType, которое отлично работает, и мне нравится проверка и автоматическая обработка сообщений об ошибках, которые приходят с ним.

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('dob', DateType::class, [
            'widget' => 'single_text',
            'format' => 'M/d/yy',
        ]);
}

Я бы хотел, чтобы пользователь мог использовать либо 2-значные, либо 4-значные годы, и оба они прошли проверку.

Кажется, что один утомительный способ сделать это - изменить этот конкретный элемент формы в объекте Request перед переходом к методу handleRequest() в моем контроллере, но это было бы беспорядочно и жестко привязано к моему коду.

Действительно хороший способ (которого не существует) было бы иметь что-то вроде другого варианта 'alternate_format' => 'M/d/yyyy'.

Есть ли у кого-нибудь более простой способ?

JS - События опций формы
JS - События опций формы
В продолжение предыдущей статьи CSS - стили, связанные с вводом формы , в этой статье мы будем использовать JS для взаимодействия с формами, на этот...
CSS - Стили, связанные с вводом формы
CSS - Стили, связанные с вводом формы
Общими стилями ввода для форм являются Input (включая Text, Radio, checkbox), Select и Textarea, из которых Input относительно прост, поэтому в этой...
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Наличие на корпоративном сайте форм заявлений о приеме на работу, или "трудовых анкет", экономит время и деньги как для соискателей, так и для...
0
0
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На данный момент я решил свою проблему с помощью некоторого клиентского javascript. Если кому-то еще нужно что-то подобное, мое поле даты - это дата рождения, и если я принимаю ограничение, что у меня нет никого старше 100 лет, то это решение хорошо подходит для моих целей. [изменить: это ограничение верно только в том случае, если вы устанавливаете год с двумя цифрами. Если вы установите формат на 4-значный год, а затем используете JavaScript для массажа в то же самое, то таких ограничений нет. В приведенном ниже сценарии предполагается, что даты не могут быть в будущем, что подходит для поля даты рождения.]

В своей форме я добавил класс в свое поле и предполагаю, что формат должен иметь год из 4 цифр:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('dob', DateType::class, [
            'widget' => 'single_text',
            'format' => 'M/d/yyyy',
            'attr' => ['class' => 'js-dob'],
        ])
}

Затем на стороне клиента у меня есть этот небольшой фрагмент, который запускается при отправке:

$('.js-save-button').on('click', function() {
    // convert 2-digit years to 4-digit version in dob field
    $('.js-dob').each(function() {
        let date = new Date($(this).val());
        if (date instanceof Date && !isNaN(date)) {
            if (date > new Date()) {
                date.setFullYear(date.getFullYear() - 100);
            }
        }
        $(this).val(date.toLocaleDateString("en-US"));
    });
});

Другие вопросы по теме