diff --git a/src/Illuminate/Routing/RouteRegistrar.php b/src/Illuminate/Routing/RouteRegistrar.php index 51a7bd74e27e..f38301866e6a 100644 --- a/src/Illuminate/Routing/RouteRegistrar.php +++ b/src/Illuminate/Routing/RouteRegistrar.php @@ -20,6 +20,7 @@ * @method \Illuminate\Routing\RouteRegistrar controller(string $controller) * @method \Illuminate\Routing\RouteRegistrar domain(string $value) * @method \Illuminate\Routing\RouteRegistrar middleware(array|string|null $middleware) + * @method \Illuminate\Routing\RouteRegistrar missing(\Closure $missing) * @method \Illuminate\Routing\RouteRegistrar name(string $value) * @method \Illuminate\Routing\RouteRegistrar namespace(string|null $value) * @method \Illuminate\Routing\RouteRegistrar prefix(string $prefix) @@ -65,6 +66,7 @@ class RouteRegistrar 'controller', 'domain', 'middleware', + 'missing', 'name', 'namespace', 'prefix', diff --git a/tests/Routing/RouteRegistrarTest.php b/tests/Routing/RouteRegistrarTest.php index cc0a366d45cc..9171119f0741 100644 --- a/tests/Routing/RouteRegistrarTest.php +++ b/tests/Routing/RouteRegistrarTest.php @@ -498,9 +498,9 @@ public function testRouteGroupChaining() public function testRegisteringNonApprovedAttributesThrows() { $this->expectException(BadMethodCallException::class); - $this->expectExceptionMessage('Method Illuminate\Routing\RouteRegistrar::missing does not exist.'); + $this->expectExceptionMessage('Method Illuminate\Routing\RouteRegistrar::unsupportedMethod does not exist.'); - $this->router->domain('foo')->missing('bar')->group(function ($router) { + $this->router->domain('foo')->unsupportedMethod('bar')->group(function ($router) { // }); } diff --git a/tests/Routing/RoutingRouteTest.php b/tests/Routing/RoutingRouteTest.php index d5766ed5f67b..da8318a04aee 100644 --- a/tests/Routing/RoutingRouteTest.php +++ b/tests/Routing/RoutingRouteTest.php @@ -1883,6 +1883,29 @@ public function testImplicitBindingsWithMissingModelHandledByMissing() $this->assertEquals(302, $response->getStatusCode()); } + public function testImplicitBindingsWithMissingModelHandledByMissingOnGroupLevel() + { + $router = $this->getRouter(); + $router->as('foo.') + ->missing(fn () => new RedirectResponse('/', 302)) + ->group(function () use ($router) { + $router->get('foo/{bar}', [ + 'middleware' => SubstituteBindings::class, + 'uses' => function (RouteModelBindingNullStub $bar = null) { + $this->assertInstanceOf(RouteModelBindingNullStub::class, $bar); + + return $bar->first(); + }, + ]); + }); + + $request = Request::create('foo/taylor', 'GET'); + + $response = $router->dispatch($request); + $this->assertTrue($response->isRedirect('/')); + $this->assertEquals(302, $response->getStatusCode()); + } + public function testImplicitBindingsWithOptionalParameterWithNoKeyInUri() { $router = $this->getRouter();