Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit22a1567

Browse files
committed
Convert previously defined date attribute to the expected class
1 parentb170889 commit22a1567

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,10 @@ public function supports(Request $request, ArgumentMetadata $argument): bool
3939
publicfunctionresolve(Request$request,ArgumentMetadata$argument):iterable
4040
{
4141
$value =$request->attributes->get($argument->getName());
42+
$class = \DateTimeInterface::class ===$argument->getType() ? \DateTimeImmutable::class :$argument->getType();
4243

4344
if ($valueinstanceof \DateTimeInterface) {
44-
yield$value;
45+
yield$valueinstanceof$class ?$value :$class::createFromInterface($value);
4546

4647
return;
4748
}
@@ -52,7 +53,6 @@ public function resolve(Request $request, ArgumentMetadata $argument): iterable
5253
return;
5354
}
5455

55-
$class = \DateTimeInterface::class ===$argument->getType() ? \DateTimeImmutable::class :$argument->getType();
5656
$format =null;
5757

5858
if ($attributes =$argument->getAttributes(MapDateTime::class, ArgumentMetadata::IS_INSTANCEOF)) {

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

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
class DateTimeValueResolverTestextends TestCase
2222
{
23-
private$defaultTimezone;
23+
privatereadonlystring$defaultTimezone;
2424

2525
protectedfunctionsetUp():void
2626
{
@@ -32,13 +32,20 @@ protected function tearDown(): void
3232
date_default_timezone_set($this->defaultTimezone);
3333
}
3434

35-
publicfunctiongetTimeZones()
35+
publicstaticfunctiongetTimeZones()
3636
{
3737
yield ['UTC'];
3838
yield ['Etc/GMT+9'];
3939
yield ['Etc/GMT-14'];
4040
}
4141

42+
publicstaticfunctiongetClasses()
43+
{
44+
yield [\DateTimeInterface::class];
45+
yield [\DateTime::class];
46+
yield [FooDateTime::class];
47+
}
48+
4249
publicfunctiontestSupports()
4350
{
4451
$resolver =newDateTimeValueResolver();
@@ -133,19 +140,25 @@ public function testNow(string $timezone)
133140
$this->assertSame($timezone,$results[0]->getTimezone()->getName(),'Default timezone');
134141
}
135142

136-
publicfunctiontestPreviouslyConvertedAttribute()
143+
/**
144+
* @param class-string<\DateTimeInterface> $class
145+
*
146+
* @dataProvider getClasses
147+
*/
148+
publicfunctiontestPreviouslyConvertedAttribute(string$class)
137149
{
138150
$resolver =newDateTimeValueResolver();
139151

140-
$argument =newArgumentMetadata('dummy',\DateTime::class,false,false,null,true);
152+
$argument =newArgumentMetadata('dummy',$class,false,false,null,true);
141153
$request =self::requestWithAttributes(['dummy' =>$datetime =new \DateTime()]);
142154

143155
/** @var \Generator $results */
144156
$results =$resolver->resolve($request,$argument);
145157
$results =iterator_to_array($results);
146158

147159
$this->assertCount(1,$results);
148-
$this->assertSame($datetime,$results[0]);
160+
$this->assertEquals($datetime,$results[0],'The value is the same, but the class can be modified.');
161+
$this->assertInstanceOf($class,$results[0]);
149162
}
150163

151164
publicfunctiontestCustomClass()
@@ -209,7 +222,7 @@ public function testWithFormat(string $timezone)
209222
$this->assertEquals('2016-09-08 12:34:56',$results[0]->format('Y-m-d H:i:s'));
210223
}
211224

212-
publicfunctionprovideInvalidDates()
225+
publicstaticfunctionprovideInvalidDates()
213226
{
214227
return [
215228
'invalid date' => [

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp