From c8240a0423ac37a574c5cc883a48eba185d419be Mon Sep 17 00:00:00 2001 From: Thomas Calvet Date: Mon, 14 Jan 2019 21:37:57 +0100 Subject: [PATCH] [Form] Add input_format option to DateType and DateTimeType --- src/Symfony/Component/Form/CHANGELOG.md | 1 + .../Form/Extension/Core/Type/DateTimeType.php | 5 ++++- .../Form/Extension/Core/Type/DateType.php | 5 ++++- .../Extension/Core/Type/DateTimeTypeTest.php | 15 +++++++++++++++ .../Tests/Extension/Core/Type/DateTypeTest.php | 15 +++++++++++++++ 5 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Form/CHANGELOG.md b/src/Symfony/Component/Form/CHANGELOG.md index 127406bcdeddb..8da8a75255faa 100644 --- a/src/Symfony/Component/Form/CHANGELOG.md +++ b/src/Symfony/Component/Form/CHANGELOG.md @@ -32,6 +32,7 @@ CHANGELOG } } ``` + * added new option `input_format` to `DateType` and `DateTimeType` to specify the date format when using the `string` input. 4.2.0 ----- diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php index 4c0bdf203f064..93439acfc9fe6 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php @@ -176,7 +176,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) $builder->addModelTransformer(new DateTimeImmutableToDateTimeTransformer()); } elseif ('string' === $options['input']) { $builder->addModelTransformer(new ReversedTransformer( - new DateTimeToStringTransformer($options['model_timezone'], $options['model_timezone']) + new DateTimeToStringTransformer($options['model_timezone'], $options['model_timezone'], $options['input_format']) )); } elseif ('timestamp' === $options['input']) { $builder->addModelTransformer(new ReversedTransformer( @@ -251,6 +251,7 @@ public function configureOptions(OptionsResolver $resolver) 'empty_data' => function (Options $options) { return $options['compound'] ? [] : ''; }, + 'input_format' => 'Y-m-d H:i:s', ]); // Don't add some defaults in order to preserve the defaults @@ -317,6 +318,8 @@ public function configureOptions(OptionsResolver $resolver) return ''; }); + + $resolver->setAllowedTypes('input_format', 'string'); } /** diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php index 81a928871dd08..ced29d88e04a2 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php @@ -154,7 +154,7 @@ class_exists('IntlTimeZone', false) ? \IntlTimeZone::createDefault() : null, $builder->addModelTransformer(new DateTimeImmutableToDateTimeTransformer()); } elseif ('string' === $options['input']) { $builder->addModelTransformer(new ReversedTransformer( - new DateTimeToStringTransformer($options['model_timezone'], $options['model_timezone'], 'Y-m-d') + new DateTimeToStringTransformer($options['model_timezone'], $options['model_timezone'], $options['input_format']) )); } elseif ('timestamp' === $options['input']) { $builder->addModelTransformer(new ReversedTransformer( @@ -283,6 +283,7 @@ public function configureOptions(OptionsResolver $resolver) return $options['compound'] ? [] : ''; }, 'choice_translation_domain' => false, + 'input_format' => 'Y-m-d', ]); $resolver->setNormalizer('placeholder', $placeholderNormalizer); @@ -305,6 +306,8 @@ public function configureOptions(OptionsResolver $resolver) $resolver->setAllowedTypes('years', 'array'); $resolver->setAllowedTypes('months', 'array'); $resolver->setAllowedTypes('days', 'array'); + + $resolver->setAllowedTypes('input_format', 'string'); } /** diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php index 4f4966c5f8d2f..692462a607845 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php @@ -671,4 +671,19 @@ public function provideEmptyData() 'Compound choice field' => ['choice', ['date' => ['year' => '2018', 'month' => '11', 'day' => '11'], 'time' => ['hour' => '21', 'minute' => '23']], $expectedData], ]; } + + public function testSubmitStringWithCustomInputFormat(): void + { + $form = $this->factory->create(static::TESTED_TYPE, null, [ + 'model_timezone' => 'UTC', + 'view_timezone' => 'UTC', + 'input' => 'string', + 'widget' => 'single_text', + 'input_format' => 'd/m/Y H:i:s P', + ]); + + $form->submit('2018-01-14T21:29:00'); + + $this->assertSame('14/01/2018 21:29:00 +00:00', $form->getData()); + } } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php index 8a627c27e4a91..3ff363f958840 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php @@ -1037,4 +1037,19 @@ public function provideEmptyData() 'Compound choice fields' => ['choice', ['year' => '2018', 'month' => '11', 'day' => '11'], $expectedData], ]; } + + public function testSubmitStringWithCustomInputFormat(): void + { + $form = $this->factory->create(static::TESTED_TYPE, null, [ + 'model_timezone' => 'UTC', + 'view_timezone' => 'UTC', + 'widget' => 'single_text', + 'input' => 'string', + 'input_format' => 'd/m/Y', + ]); + + $form->submit('2018-01-14'); + + $this->assertSame('14/01/2018', $form->getData()); + } } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy