Skip to content

Commit fc0c66f

Browse files
[12.x] Add a default option when retrieving an enum from data (#55735)
* Add a default option when retrieving an enum from data * Update InteractsWithData.php --------- Co-authored-by: Taylor Otwell <[email protected]>
1 parent 53687e4 commit fc0c66f

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

src/Illuminate/Support/Traits/InteractsWithData.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -312,15 +312,16 @@ public function date($key, $format = null, $tz = null)
312312
*
313313
* @param string $key
314314
* @param class-string<TEnum> $enumClass
315+
* @param TEnum|null $default
315316
* @return TEnum|null
316317
*/
317-
public function enum($key, $enumClass)
318+
public function enum($key, $enumClass, $default = null)
318319
{
319320
if ($this->isNotFilled($key) || ! $this->isBackedEnum($enumClass)) {
320-
return null;
321+
return value($default);
321322
}
322323

323-
return $enumClass::tryFrom($this->data($key));
324+
return $enumClass::tryFrom($this->data($key)) ?: value($default);
324325
}
325326

326327
/**

tests/Http/HttpRequestTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -804,6 +804,9 @@ public function testEnumMethod()
804804

805805
$this->assertNull($request->enum('doesnt_exist', TestEnumBacked::class));
806806

807+
$this->assertEquals(TestEnumBacked::test, $request->enum('invalid_enum_value', TestEnumBacked::class, TestEnumBacked::test));
808+
$this->assertEquals(TestEnumBacked::test, $request->enum('missing_key', TestEnumBacked::class, TestEnumBacked::test));
809+
807810
$this->assertEquals(TestEnumBacked::test, $request->enum('valid_enum_value', TestEnumBacked::class));
808811

809812
$this->assertNull($request->enum('invalid_enum_value', TestEnumBacked::class));

0 commit comments

Comments
 (0)