Skip to content

Commit b2a35c7

Browse files
bug symfony#48110 [HttpKernel] Fix deprecation for DateTimeValueResolver with null on non-nullable argument (GromNaN)
This PR was merged into the 6.1 branch. Discussion ---------- [HttpKernel] Fix deprecation for DateTimeValueResolver with null on non-nullable argument | Q | A | ------------- | --- | Branch? | 6.1 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | https://github.com/symfony/symfony/pull/48098/files#r1013918566 | License | MIT | Doc PR | n/a Remove deprecation message when the value is `null` and the controller argument is not nullable. ``` Deprecated: DateTimeImmutable::__construct(): Passing null to parameter #1 ($datetime) of type string is deprecated ``` This class have been modified in 6.2. The new test case needs to be updated. Commits ------- 1d7387b Fix deprecation notice when date argument is not nullable and null value is provided
2 parents 55ed2d4 + 1d7387b commit b2a35c7

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/DateTimeValueResolver.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,6 @@ public function resolve(Request $request, ArgumentMetadata $argument): iterable
6060
$format = $attribute->format;
6161
}
6262

63-
$date = false;
64-
6563
if (null !== $format) {
6664
$date = $class::createFromFormat($format, $value);
6765

@@ -73,7 +71,7 @@ public function resolve(Request $request, ArgumentMetadata $argument): iterable
7371
$value = '@'.$value;
7472
}
7573
try {
76-
$date = new $class($value);
74+
$date = new $class($value ?? 'now');
7775
} catch (\Exception) {
7876
$date = false;
7977
}

src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/DateTimeValueResolverTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,26 @@ public function testNullableWithEmptyAttribute()
113113
$this->assertNull($results[0]);
114114
}
115115

116+
/**
117+
* @dataProvider getTimeZones
118+
*/
119+
public function testNow(string $timezone)
120+
{
121+
date_default_timezone_set($timezone);
122+
$resolver = new DateTimeValueResolver();
123+
124+
$argument = new ArgumentMetadata('dummy', \DateTime::class, false, false, null, false);
125+
$request = self::requestWithAttributes(['dummy' => null]);
126+
127+
/** @var \Generator $results */
128+
$results = $resolver->resolve($request, $argument);
129+
$results = iterator_to_array($results);
130+
131+
$this->assertCount(1, $results);
132+
$this->assertEquals('0', $results[0]->diff(new \DateTimeImmutable())->format('%s'));
133+
$this->assertSame($timezone, $results[0]->getTimezone()->getName(), 'Default timezone');
134+
}
135+
116136
public function testPreviouslyConvertedAttribute()
117137
{
118138
$resolver = new DateTimeValueResolver();

0 commit comments

Comments
 (0)