diff --git a/src/RequestHandler.php b/src/RequestHandler.php index 45b67ab..cc5b9e1 100644 --- a/src/RequestHandler.php +++ b/src/RequestHandler.php @@ -42,6 +42,10 @@ public function __invoke(Request $request): mixed abort_unless($matchedView ?? null, 404); + if ($name = $matchedView->name()) { + $request->route()->action['as'] = $name; + } + app(Dispatcher::class)->dispatch(new Events\ViewMatched($matchedView, $mountPath)); $middleware = collect($this->middleware($mountPath, $matchedView)); @@ -60,11 +64,13 @@ public function __invoke(Request $request): mixed $app = app(); - $app->make(FolioManager::class)->terminateUsing( - fn () => $middleware->filter(fn ($middleware) => is_string($middleware) && class_exists($middleware) && method_exists($middleware, 'terminate')) - ->map(fn (string $middleware) => $app->make($middleware)) - ->each(fn (object $middleware) => $app->call([$middleware, 'terminate'], ['request' => $request, 'response' => $response])), - ); + $app->make(FolioManager::class)->terminateUsing(function () use ($middleware, $app, $request, $response) { + $middleware->filter(fn ($m) => is_string($m) && class_exists($m) && method_exists($m, 'terminate')) + ->map(fn (string $m) => $app->make($m)) + ->each(fn (object $m) => $app->call([$m, 'terminate'], ['request' => $request, 'response' => $response])); + + $request->route()->action['as'] = 'laravel-folio'; + }); return $response; }); diff --git a/tests/Feature/CurrentRouteTest.php b/tests/Feature/CurrentRouteTest.php new file mode 100644 index 0000000..fececb4 --- /dev/null +++ b/tests/Feature/CurrentRouteTest.php @@ -0,0 +1,31 @@ + Folio::route(__DIR__.'/resources/views/another-set-of-pages')); + +it('dynamically updates folio is named route', function () { + $response = $this->get(route('pens.index')); + + $response + ->assertSee('Is pens.index active: true.') + ->assertSee('Current route name: pens.index.') + ->assertSee('Has pens.index: false.') + ->assertSee('Is pens: true.'); +}); + +it('resets folio is route name after handling request', function () { + $this->get(route('pens.index')); + + expect(request()->route()->getName())->toBe('laravel-folio'); +}); + +it('does not change the route name if there is no name', function () { + $response = $this->get('pens/show'); + + $response + ->assertSee('Is pens.show active: false.') + ->assertSee('Current route name: laravel-folio.') + ->assertSee('Has pens.show: false.') + ->assertSee('Is pens/show: true.'); +}); diff --git a/tests/Feature/resources/views/another-set-of-pages/pens/index.blade.php b/tests/Feature/resources/views/another-set-of-pages/pens/index.blade.php new file mode 100644 index 0000000..a324de8 --- /dev/null +++ b/tests/Feature/resources/views/another-set-of-pages/pens/index.blade.php @@ -0,0 +1,14 @@ + + + + + diff --git a/tests/Feature/resources/views/another-set-of-pages/pens/show.blade.php b/tests/Feature/resources/views/another-set-of-pages/pens/show.blade.php new file mode 100644 index 0000000..7e0c87a --- /dev/null +++ b/tests/Feature/resources/views/another-set-of-pages/pens/show.blade.php @@ -0,0 +1,8 @@ + + +