diff --git a/src/Illuminate/Support/Traits/InteractsWithData.php b/src/Illuminate/Support/Traits/InteractsWithData.php index bd39205d942..5647570eb57 100644 --- a/src/Illuminate/Support/Traits/InteractsWithData.php +++ b/src/Illuminate/Support/Traits/InteractsWithData.php @@ -312,15 +312,16 @@ public function date($key, $format = null, $tz = null) * * @param string $key * @param class-string $enumClass + * @param TEnum|null $default * @return TEnum|null */ - public function enum($key, $enumClass) + public function enum($key, $enumClass, $default = null) { if ($this->isNotFilled($key) || ! $this->isBackedEnum($enumClass)) { - return null; + return value($default); } - return $enumClass::tryFrom($this->data($key)); + return $enumClass::tryFrom($this->data($key)) ?: value($default); } /** diff --git a/tests/Http/HttpRequestTest.php b/tests/Http/HttpRequestTest.php index 249b3043691..08ab80bc6d8 100644 --- a/tests/Http/HttpRequestTest.php +++ b/tests/Http/HttpRequestTest.php @@ -804,6 +804,9 @@ public function testEnumMethod() $this->assertNull($request->enum('doesnt_exist', TestEnumBacked::class)); + $this->assertEquals(TestEnumBacked::test, $request->enum('invalid_enum_value', TestEnumBacked::class, TestEnumBacked::test)); + $this->assertEquals(TestEnumBacked::test, $request->enum('missing_key', TestEnumBacked::class, TestEnumBacked::test)); + $this->assertEquals(TestEnumBacked::test, $request->enum('valid_enum_value', TestEnumBacked::class)); $this->assertNull($request->enum('invalid_enum_value', TestEnumBacked::class));