diff --git a/src/Illuminate/Routing/Events/Routing.php b/src/Illuminate/Routing/Events/Routing.php new file mode 100644 index 000000000000..af1bb48d32bd --- /dev/null +++ b/src/Illuminate/Routing/Events/Routing.php @@ -0,0 +1,24 @@ +request = $request; + } +} diff --git a/src/Illuminate/Routing/Router.php b/src/Illuminate/Routing/Router.php index 6091f9878717..0572e02312e6 100644 --- a/src/Illuminate/Routing/Router.php +++ b/src/Illuminate/Routing/Router.php @@ -16,6 +16,7 @@ use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Routing\Events\RouteMatched; +use Illuminate\Routing\Events\Routing; use Illuminate\Support\Arr; use Illuminate\Support\Collection; use Illuminate\Support\Str; @@ -674,6 +675,8 @@ public function dispatchToRoute(Request $request) */ protected function findRoute($request) { + $this->events->dispatch(new Routing($request)); + $this->current = $route = $this->routes->match($request); $route->setContainer($this->container); diff --git a/tests/Routing/RoutingRouteTest.php b/tests/Routing/RoutingRouteTest.php index 57dc86d81200..2c4f6af39a26 100644 --- a/tests/Routing/RoutingRouteTest.php +++ b/tests/Routing/RoutingRouteTest.php @@ -19,6 +19,7 @@ use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Routing\Controller; +use Illuminate\Routing\Events\Routing; use Illuminate\Routing\Exceptions\UrlGenerationException; use Illuminate\Routing\Middleware\SubstituteBindings; use Illuminate\Routing\ResourceRegistrar; @@ -1523,6 +1524,32 @@ public function testRouterFiresRoutedEvent() unset($_SERVER['__router.route']); } + public function testRouterFiresRouteMatchingEvent() + { + $container = new Container; + $router = new Router($events = new Dispatcher, $container); + $container->singleton(Registrar::class, function () use ($router) { + return $router; + }); + $router->get('foo/bar', function () { + return ''; + }); + + $request = Request::create('http://foo.com/foo/bar', 'GET'); + + $_SERVER['__router.request'] = null; + + $events->listen(Routing::class, function ($event) { + $_SERVER['__router.request'] = $event->request; + }); + + $router->dispatchToRoute($request); + + $this->assertInstanceOf(Request::class, $_SERVER['__router.request']); + $this->assertEquals($_SERVER['__router.request'], $request); + unset($_SERVER['__router.request']); + } + public function testRouterPatternSetting() { $router = $this->getRouter();