Skip to content

Commit

Permalink
Adds request()->routeIs(...) support
Browse files Browse the repository at this point in the history
  • Loading branch information
nunomaduro committed Aug 23, 2023
1 parent 3ebcf02 commit 578a40e
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 5 deletions.
16 changes: 11 additions & 5 deletions src/RequestHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand All @@ -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;
});
Expand Down
31 changes: 31 additions & 0 deletions tests/Feature/CurrentRouteTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

use Laravel\Folio\Folio;

beforeEach(fn () => 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.');
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?php
use function Laravel\Folio\name;
name('pens.index'); ?>

<x-app>
<ul>
<li>Is pens.index active: {{ request()->routeIs('pens.index') ? 'true' : 'false' }}.</li>
<li>Current route name: {{ Route::currentRouteName() }}.</li>
<li>Has pens.index: {{ Route::has('pens.index') ? 'true' : 'false' }}.</li> <!-- It's a know limitation... -->
<li>Is pens: {{ request()->is('pens') ? 'true' : 'false' }}.</li>
</ul>
</x-app>
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<x-app>
<ul>
<li>Is pens.show active: {{ request()->routeIs('pens.show') ? 'true' : 'false' }}.</li>
<li>Current route name: {{ Route::currentRouteName() }}.</li>
<li>Has pens.show: {{ Route::has('pens.show') ? 'true' : 'false' }}.</li> <!-- It's a know limitation... -->
<li>Is pens/show: {{ request()->is('pens/show') ? 'true' : 'false' }}.</li>
</ul>
</x-app>

0 comments on commit 578a40e

Please sign in to comment.