From a62feea4ad5321018d5734b1e4360e5a770490e5 Mon Sep 17 00:00:00 2001 From: Yonel Ceruto Date: Fri, 26 Jul 2019 09:39:46 -0400 Subject: [PATCH] [DX] derive default timezone from reference_date option when possible --- .../Form/Extension/Core/Type/TimeType.php | 16 +++++++++++++++- .../Tests/Extension/Core/Type/TimeTypeTest.php | 10 ++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php b/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php index 8d4ef4181b..053f774fa8 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php @@ -267,6 +267,18 @@ class TimeType extends AbstractType ]; }; + $modelTimezone = static function (Options $options, $value): ?string { + if (null !== $value) { + return $value; + } + + if (null !== $options['reference_date']) { + return $options['reference_date']->getTimezone()->getName(); + } + + return null; + }; + $resolver->setDefaults([ 'hours' => range(0, 23), 'minutes' => range(0, 59), @@ -276,7 +288,7 @@ class TimeType extends AbstractType 'input_format' => 'H:i:s', 'with_minutes' => true, 'with_seconds' => false, - 'model_timezone' => null, + 'model_timezone' => $modelTimezone, 'view_timezone' => null, 'reference_date' => null, 'placeholder' => $placeholderDefault, @@ -325,6 +337,8 @@ class TimeType extends AbstractType $resolver->setAllowedTypes('minutes', 'array'); $resolver->setAllowedTypes('seconds', 'array'); $resolver->setAllowedTypes('input_format', 'string'); + $resolver->setAllowedTypes('model_timezone', ['null', 'string']); + $resolver->setAllowedTypes('view_timezone', ['null', 'string']); $resolver->setAllowedTypes('reference_date', ['null', \DateTimeInterface::class]); } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php index e5d7fa9a7c..6236cc47bd 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php @@ -860,6 +860,16 @@ class TimeTypeTest extends BaseTypeTest ]); } + public function testModelTimezoneDefaultToReferenceDateTimezoneIfProvided() + { + $form = $this->factory->create(static::TESTED_TYPE, null, [ + 'view_timezone' => 'Europe/Berlin', + 'reference_date' => new \DateTimeImmutable('now', new \DateTimeZone('Europe/Berlin')), + ]); + + $this->assertSame('Europe/Berlin', $form->getConfig()->getOption('model_timezone')); + } + public function testPassDefaultChoiceTranslationDomain() { $form = $this->factory->create(static::TESTED_TYPE);