Skip to content
Permalink
Browse files

feature #28723 [Form] deprecate custom formats with HTML5 widgets (xa…

…bbuh)

This PR was merged into the 4.3-dev branch.

Discussion
----------

[Form] deprecate custom formats with HTML5 widgets

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | yes
| Tests pass?   | yes
| Fixed tickets |
| License       | MIT
| Doc PR        | symfony/symfony-docs#10986

Commits
-------

b70c1b6 deprecate custom formats with HTML5 widgets
  • Loading branch information...
xabbuh committed Feb 21, 2019
2 parents 3560cfd + b70c1b6 commit 93c2feb7b365bc6159b470ce97193f14eb471fe8
@@ -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
@@ -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.
@@ -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
@@ -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 '';
});
}
/**
@@ -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 '';
});
}
/**
@@ -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
------------------
@@ -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, [
@@ -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();

0 comments on commit 93c2feb

Please sign in to comment.
You can’t perform that action at this time.