Symfony4 DateTimeType как виджет single_text неправильно форматирует - PullRequest
1 голос
/ 15 апреля 2019

Эта проблема начинает приводить меня в бешенство, и я не могу найти правильную информацию или документацию по этой проблеме.

Я использую Symfony 4.2.3

У меня естьформа с dateTimeType:

 ->add(
            'startDate',
            DateTimeType::class,
            [
                'widget' => 'single_text',
                'input' => 'datetime',
                'html5' => false,
                'attr' => [
                    'class' => 'combinedPickerInput',
                    'placeholder' => date('d/m/y H:i'),
                ],
                'format' => 'd/m/Y H:i',
                'date_format' => 'd/m/Y H:i',
                'label' => 'form.specialOffer.startDate',
                'translation_domain' => 'Default',
                'required' => false,
            ]
        )

Когда я отправляю форму, используя AJAX, $ _POST показывает 100 startDate = '24/04/2019 06:24'

Однако, как только я использую функцию getData () в моей формезначение становится объектом DateTime (как и должно быть), но оно неправильно отформатировано

startDate = {
    date = 2018-12-24 06:04:00.000000,
    timezone_type = 3
    timezone = "Europe/Paris"
}

Поле в моей сущности:

 /**
 * @ORM\Column(type="datetime", nullable=true)
 */
private $startDate;

Я также попытался использовать DateType вместоDateTimeType, но это ничего не меняет.

->add(
            'endDate',
            DateType::class,
            [
                'widget' => 'single_text',
                'html5' => false,
                'attr' => [
                    'class' => 'combinedPickerInput',
                    'placeholder' => date('d/m/y H:i'),
                ],
                'format' => 'd/m/Y H:i',
                'label' => 'form.specialOffer.endDate',
                'translation_domain' => 'Default',
                'required' => false,
            ]
        )

Результат точно такой же, как и с DateTimeType

При взгляде на класс DateTimeType что-то выглядит немного не так.при настройке формата даты код выглядит следующим образом:

$dateFormat = \is_int($options['date_format']) ? $options['date_format'] : self::DEFAULT_DATE_FORMAT;

, что для меня делает невозможным использование формата date_, который не является целым числом.Однако приведенное ниже сообщение проверки и ошибки, похоже, указывает на то, что на самом деле должна быть возможность передать строку для пользовательского формата даты

 if (!\in_array($dateFormat, self::$acceptedFormats, true)) {
        throw new InvalidOptionsException('The "date_format" option must be one of the IntlDateFormatter constants (FULL, LONG, MEDIUM, SHORT) or a string representing a custom format.');
    }

Я совершенно растерялся, и любая помощь будет принята с благодарностью

Ответы [ 2 ]

2 голосов
/ 15 апреля 2019

Можете ли вы попробовать изменить значение параметра формата с помощью дд / мм / гггг Ч: i и использовать DateTimeType вместо DateType

->add('endDate', DateType::class, [
    'widget' => 'single_text',
    'html5' => false,
    'attr' => [
        'class' => 'combinedPickerInput',
        'placeholder' => date('d/m/y H:i'),
    ],
    'format' => 'dd/MM/yyyy H:i',
    'label' => 'form.specialOffer.endDate',
    'translation_domain' => 'Default',
    'required' => false,
])
0 голосов
/ 16 апреля 2019

Проверьте документацию для опции date_format в поле DateTimeType.Он не совпадает с форматом, используемым в функции date() или DateTime классах.

https://symfony.com/doc/current/reference/forms/types/datetime.html#date-format

Значение, установленное для date_format, должно быть целым числом;одна из констант, перечисленных в https://www.php.net/manual/en/class.intldateformatter.php#intl.intldateformatter-constants

...