From 1d7387b9e3d89186e628897185eed5b88110fa27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Tamarelle?= Date: Fri, 4 Nov 2022 13:00:28 +0100 Subject: [PATCH] Fix deprecation notice when date argument is not nullable and null value is provided --- .../DateTimeValueResolver.php | 4 +--- .../DateTimeValueResolverTest.php | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/DateTimeValueResolver.php b/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/DateTimeValueResolver.php index d8953f564b440..e9a7494a4c761 100644 --- a/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/DateTimeValueResolver.php +++ b/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/DateTimeValueResolver.php @@ -60,8 +60,6 @@ public function resolve(Request $request, ArgumentMetadata $argument): iterable $format = $attribute->format; } - $date = false; - if (null !== $format) { $date = $class::createFromFormat($format, $value); @@ -73,7 +71,7 @@ public function resolve(Request $request, ArgumentMetadata $argument): iterable $value = '@'.$value; } try { - $date = new $class($value); + $date = new $class($value ?? 'now'); } catch (\Exception) { $date = false; } diff --git a/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/DateTimeValueResolverTest.php b/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/DateTimeValueResolverTest.php index e1c3d662c6ece..b438c527a32da 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/DateTimeValueResolverTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/DateTimeValueResolverTest.php @@ -113,6 +113,26 @@ public function testNullableWithEmptyAttribute() $this->assertNull($results[0]); } + /** + * @dataProvider getTimeZones + */ + public function testNow(string $timezone) + { + date_default_timezone_set($timezone); + $resolver = new DateTimeValueResolver(); + + $argument = new ArgumentMetadata('dummy', \DateTime::class, false, false, null, false); + $request = self::requestWithAttributes(['dummy' => null]); + + /** @var \Generator $results */ + $results = $resolver->resolve($request, $argument); + $results = iterator_to_array($results); + + $this->assertCount(1, $results); + $this->assertEquals('0', $results[0]->diff(new \DateTimeImmutable())->format('%s')); + $this->assertSame($timezone, $results[0]->getTimezone()->getName(), 'Default timezone'); + } + public function testPreviouslyConvertedAttribute() { $resolver = new DateTimeValueResolver();