diff --git a/UPGRADE-4.3.md b/UPGRADE-4.3.md index 8050fed2679bc..7a2dca20633fa 100644 --- a/UPGRADE-4.3.md +++ b/UPGRADE-4.3.md @@ -23,6 +23,7 @@ Config Form ---- + * Using the `format` option of `DateType` and `DateTimeType` when the `html5` option is enabled is deprecated. * Using names for buttons that do not start with a letter, a digit, or an underscore is deprecated and will lead to an exception in 5.0. * Using names for buttons that do not contain only letters, digits, underscores, hyphens, and colons is deprecated and diff --git a/UPGRADE-5.0.md b/UPGRADE-5.0.md index 07a21d558bf9b..f61211c1cc15e 100644 --- a/UPGRADE-5.0.md +++ b/UPGRADE-5.0.md @@ -78,6 +78,7 @@ Finder Form ---- + * Removed support for using the `format` option of `DateType` and `DateTimeType` when the `html5` option is enabled. * Using names for buttons that do not start with a letter, a digit, or an underscore leads to an exception. * Using names for buttons that do not contain only letters, digits, underscores, hyphens, and colons leads to an exception. diff --git a/src/Symfony/Component/Form/CHANGELOG.md b/src/Symfony/Component/Form/CHANGELOG.md index 2304727571255..d25fbc6a4c0bf 100644 --- a/src/Symfony/Component/Form/CHANGELOG.md +++ b/src/Symfony/Component/Form/CHANGELOG.md @@ -4,6 +4,7 @@ CHANGELOG 4.3.0 ----- + * Using the `format` option of `DateType` and `DateTimeType` when the `html5` option is enabled is deprecated. * Using names for buttons that do not start with a letter, a digit, or an underscore is deprecated and will lead to an exception in 5.0. * Using names for buttons that do not contain only letters, digits, underscores, hyphens, and colons is deprecated and diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php index 291d86af6fc14..4e84b71a7c8e4 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php @@ -159,6 +159,10 @@ public function buildForm(FormBuilderInterface $builder, array $options) $dateOptions['input'] = $timeOptions['input'] = 'array'; $dateOptions['error_bubbling'] = $timeOptions['error_bubbling'] = true; + if (isset($dateOptions['format']) && DateType::HTML5_FORMAT !== $dateOptions['format']) { + $dateOptions['html5'] = false; + } + $builder ->addViewTransformer(new DataTransformerChain([ new DateTimeToArrayTransformer($options['model_timezone'], $options['view_timezone'], $parts), @@ -294,6 +298,8 @@ public function configureOptions(OptionsResolver $resolver) 'choice', ]); + $resolver->setAllowedTypes('input_format', 'string'); + $resolver->setDeprecated('date_format', function (Options $options, $dateFormat) { if (null !== $dateFormat && 'single_text' === $options['widget'] && self::HTML5_FORMAT === $options['format']) { return sprintf('Using the "date_format" option of %s with an HTML5 date widget is deprecated since Symfony 4.3 and will lead to an exception in 5.0.', self::class); @@ -318,8 +324,14 @@ public function configureOptions(OptionsResolver $resolver) return ''; }); + $resolver->setDeprecated('html5', function (Options $options, $html5) { + if ($html5 && self::HTML5_FORMAT !== $options['format']) { + return sprintf('Using a custom format when the "html5" option of %s is enabled is deprecated since Symfony 4.3 and will lead to an exception in 5.0.', self::class); + //throw new LogicException(sprintf('Cannot use the "format" option of %s when the "html5" option is disabled.', self::class)); + } - $resolver->setAllowedTypes('input_format', 'string'); + return ''; + }); } /** diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php index ced29d88e04a2..39002df2b6d24 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php @@ -306,8 +306,16 @@ public function configureOptions(OptionsResolver $resolver) $resolver->setAllowedTypes('years', 'array'); $resolver->setAllowedTypes('months', 'array'); $resolver->setAllowedTypes('days', 'array'); - $resolver->setAllowedTypes('input_format', 'string'); + + $resolver->setDeprecated('html5', function (Options $options, $html5) { + if ($html5 && 'single_text' === $options['widget'] && self::HTML5_FORMAT !== $options['format']) { + return sprintf('Using a custom format when the "html5" option of %s is enabled is deprecated since Symfony 4.3 and will lead to an exception in 5.0.', self::class); + //throw new LogicException(sprintf('Cannot use the "format" option of %s when the "html5" option is disabled.', self::class)); + } + + return ''; + }); } /** diff --git a/src/Symfony/Component/Form/Tests/Command/DebugCommandTest.php b/src/Symfony/Component/Form/Tests/Command/DebugCommandTest.php index 99391245da97d..b572daf7b2bbe 100644 --- a/src/Symfony/Component/Form/Tests/Command/DebugCommandTest.php +++ b/src/Symfony/Component/Form/Tests/Command/DebugCommandTest.php @@ -45,7 +45,7 @@ public function testDebugDeprecatedDefaults() Built-in form types (Symfony\Component\Form\Extension\Core\Type) ---------------------------------------------------------------- - DateTimeType, IntegerType, TimezoneType + BirthdayType, DateTimeType, DateType, IntegerType, TimezoneType Service form types ------------------ 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 20899c15701df..93935157fe9c2 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php @@ -470,6 +470,9 @@ public function testDontPassHtml5TypeIfHtml5NotAllowed() $this->assertArrayNotHasKey('type', $view->vars); } + /** + * @group legacy + */ public function testDontPassHtml5TypeIfNotHtml5Format() { $view = $this->factory->create(static::TESTED_TYPE, null, [ 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 3ff363f958840..f84547141fc9a 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php @@ -76,6 +76,7 @@ public function testSubmitFromSingleTextDateTimeWithCustomFormat() 'widget' => 'single_text', 'input' => 'datetime', 'format' => 'yyyy', + 'html5' => false, ]); $form->submit('2010'); @@ -93,6 +94,7 @@ public function testSubmitFromSingleTextDateTime() $form = $this->factory->create(static::TESTED_TYPE, null, [ 'format' => \IntlDateFormatter::MEDIUM, + 'html5' => false, 'model_timezone' => 'UTC', 'view_timezone' => 'UTC', 'widget' => 'single_text', @@ -114,6 +116,7 @@ public function testSubmitFromSingleTextDateTimeImmutable() $form = $this->factory->create(static::TESTED_TYPE, null, [ 'format' => \IntlDateFormatter::MEDIUM, + 'html5' => false, 'model_timezone' => 'UTC', 'view_timezone' => 'UTC', 'widget' => 'single_text', @@ -136,6 +139,7 @@ public function testSubmitFromSingleTextString() $form = $this->factory->create(static::TESTED_TYPE, null, [ 'format' => \IntlDateFormatter::MEDIUM, + 'html5' => false, 'model_timezone' => 'UTC', 'view_timezone' => 'UTC', 'widget' => 'single_text', @@ -157,6 +161,7 @@ public function testSubmitFromSingleTextTimestamp() $form = $this->factory->create(static::TESTED_TYPE, null, [ 'format' => \IntlDateFormatter::MEDIUM, + 'html5' => false, 'model_timezone' => 'UTC', 'view_timezone' => 'UTC', 'widget' => 'single_text', @@ -180,6 +185,7 @@ public function testSubmitFromSingleTextRaw() $form = $this->factory->create(static::TESTED_TYPE, null, [ 'format' => \IntlDateFormatter::MEDIUM, + 'html5' => false, 'model_timezone' => 'UTC', 'view_timezone' => 'UTC', 'widget' => 'single_text', @@ -270,6 +276,7 @@ public function testSubmitFromInputDateTimeDifferentPattern() 'model_timezone' => 'UTC', 'view_timezone' => 'UTC', 'format' => 'MM*yyyy*dd', + 'html5' => false, 'widget' => 'single_text', 'input' => 'datetime', ]); @@ -286,6 +293,7 @@ public function testSubmitFromInputStringDifferentPattern() 'model_timezone' => 'UTC', 'view_timezone' => 'UTC', 'format' => 'MM*yyyy*dd', + 'html5' => false, 'widget' => 'single_text', 'input' => 'string', ]); @@ -302,6 +310,7 @@ public function testSubmitFromInputTimestampDifferentPattern() 'model_timezone' => 'UTC', 'view_timezone' => 'UTC', 'format' => 'MM*yyyy*dd', + 'html5' => false, 'widget' => 'single_text', 'input' => 'timestamp', ]); @@ -320,6 +329,7 @@ public function testSubmitFromInputRawDifferentPattern() 'model_timezone' => 'UTC', 'view_timezone' => 'UTC', 'format' => 'MM*yyyy*dd', + 'html5' => false, 'widget' => 'single_text', 'input' => 'array', ]); @@ -368,6 +378,7 @@ public function testThrowExceptionIfFormatIsNoPattern() { $this->factory->create(static::TESTED_TYPE, null, [ 'format' => '0', + 'html5' => false, 'widget' => 'single_text', 'input' => 'string', ]); @@ -394,6 +405,7 @@ public function testThrowExceptionIfFormatMissesYearMonthAndDayWithSingleTextWid $this->factory->create(static::TESTED_TYPE, null, [ 'widget' => 'single_text', 'format' => 'wrong', + 'html5' => false, ]); } @@ -456,6 +468,7 @@ public function testSetDataWithNegativeTimezoneOffsetStringInput() $form = $this->factory->create(static::TESTED_TYPE, null, [ 'format' => \IntlDateFormatter::MEDIUM, + 'html5' => false, 'model_timezone' => 'UTC', 'view_timezone' => 'America/New_York', 'input' => 'string', @@ -478,6 +491,7 @@ public function testSetDataWithNegativeTimezoneOffsetDateTimeInput() $form = $this->factory->create(static::TESTED_TYPE, null, [ 'format' => \IntlDateFormatter::MEDIUM, + 'html5' => false, 'model_timezone' => 'UTC', 'view_timezone' => 'America/New_York', 'input' => 'datetime', @@ -856,6 +870,7 @@ public function testDontPassHtml5TypeIfNotHtml5Format() $view = $this->factory->create(static::TESTED_TYPE, null, [ 'widget' => 'single_text', 'format' => \IntlDateFormatter::MEDIUM, + 'html5' => false, ]) ->createView();
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: