From 1a368fc18e0a07a9acc441b5e4c6c842f4ae89e1 Mon Sep 17 00:00:00 2001 From: Kai Dederichs Date: Fri, 30 Apr 2021 11:59:29 +0200 Subject: [PATCH] Use reference date in reverse transform Fixes #40997 --- .../Form/Extension/Core/Type/TimeType.php | 2 +- .../Extension/Core/Type/TimeTypeTest.php | 21 +++++++++++++++++++ 2 files changed, 22 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 cd337376e22f1..85b00db57c091 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php @@ -204,7 +204,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) )); } elseif ('array' === $options['input']) { $builder->addModelTransformer(new ReversedTransformer( - new DateTimeToArrayTransformer($options['model_timezone'], $options['model_timezone'], $parts) + new DateTimeToArrayTransformer($options['model_timezone'], $options['model_timezone'], $parts, 'text' === $options['widget'], $options['reference_date']) )); } } 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 ca4977b0500d1..8da1e2dd5c35e 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php @@ -991,6 +991,27 @@ public function testArrayTimeWithReferenceDoesNotUseReferenceTimeOnZero() $this->assertSame($input, $form->getViewData()); } + public function testArrayTimeWithReferenceDoesUseReferenceDateOnModelTransform() + { + $input = [ + 'hour' => '21', + 'minute' => '45', + ]; + + $form = $this->factory->create(static::TESTED_TYPE, $input, [ + 'model_timezone' => 'UTC', + 'view_timezone' => 'Europe/Berlin', + 'reference_date' => new \DateTimeImmutable('01-05-2021 12:34:56', new \DateTimeZone('UTC')), + 'input' => 'array', + ]); + + $this->assertSame($input, $form->getData()); + $this->assertEquals([ + 'hour' => '23', + 'minute' => '45', + ], $form->getViewData()); + } + /** * @dataProvider provideEmptyData */