Skip to content

Commit 0366204

Browse files
authored
Merge pull request #167 from Cannonb4ll/master
Ability to set root view on the new middleware
2 parents 947dcfd + b94a858 commit 0366204

File tree

3 files changed

+63
-3
lines changed

3 files changed

+63
-3
lines changed

src/Middleware.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@
88

99
class Middleware
1010
{
11+
/**
12+
* The root template that's loaded on the first page visit.
13+
*
14+
* @see https://inertiajs.com/server-side-setup#root-template
15+
* @var string
16+
*/
17+
protected $rootView = 'app';
18+
1119
/**
1220
* Determines the current asset version.
1321
*
@@ -42,6 +50,18 @@ public function share(Request $request)
4250
];
4351
}
4452

53+
/**
54+
* Sets the root template that's loaded on the first page visit.
55+
*
56+
* @see https://inertiajs.com/server-side-setup#root-template
57+
* @param Request $request
58+
* @return string
59+
*/
60+
public function rootView(Request $request)
61+
{
62+
return $this->rootView;
63+
}
64+
4565
/**
4666
* Handle the incoming request.
4767
*
@@ -57,6 +77,8 @@ public function handle(Request $request, Closure $next)
5777

5878
Inertia::share($this->share($request));
5979

80+
Inertia::setRootView($this->rootView($request));
81+
6082
$response = $next($request);
6183
$response = $this->checkVersion($request, $response);
6284
$response = $this->changeRedirectCode($request, $response);

stubs/middleware.stub

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@ use Inertia\Middleware;
77

88
class {{ class }} extends Middleware
99
{
10+
/**
11+
* The root template that's loaded on the first page visit.
12+
*
13+
* @see https://inertiajs.com/server-side-setup#root-template
14+
* @var string
15+
*/
16+
protected $rootView = 'app';
17+
1018
/**
1119
* Determines the current asset version.
1220
*

tests/MiddlewareTest.php

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Illuminate\Support\MessageBag;
1010
use Illuminate\Support\ViewErrorBag;
1111
use Inertia\Inertia;
12+
use Inertia\Middleware;
1213
use Inertia\Tests\Stubs\ExampleMiddleware;
1314

1415
class MiddlewareTest extends TestCase
@@ -139,10 +140,39 @@ public function test_default_validation_errors_can_be_overwritten()
139140
]);
140141
}
141142

142-
private function prepareMockEndpoint($version = null, $shared = [])
143+
public function test_middleware_can_change_the_root_view_via_a_property()
143144
{
144-
return Route::middleware(StartSession::class)->get('/', function (Request $request) use ($version, $shared) {
145-
return (new ExampleMiddleware($version, $shared))->handle($request, function ($request) {
145+
$this->prepareMockEndpoint(null, [], new class extends Middleware {
146+
protected $rootView = 'welcome';
147+
});
148+
149+
$response = $this->get('/');
150+
$response->assertOk();
151+
$response->assertViewIs('welcome');
152+
}
153+
154+
public function test_middleware_can_change_the_root_view_by_overriding_the_rootview_method()
155+
{
156+
$this->prepareMockEndpoint(null, [], new class extends Middleware {
157+
public function rootView(Request $request)
158+
{
159+
return 'welcome';
160+
}
161+
});
162+
163+
$response = $this->get('/');
164+
$response->assertOk();
165+
$response->assertViewIs('welcome');
166+
}
167+
168+
private function prepareMockEndpoint($version = null, $shared = [], $middleware = null)
169+
{
170+
if (is_null($middleware)) {
171+
$middleware = new ExampleMiddleware($version, $shared);
172+
}
173+
174+
return Route::middleware(StartSession::class)->get('/', function (Request $request) use ($middleware) {
175+
return $middleware->handle($request, function ($request) {
146176
return Inertia::render('User/Edit', ['user' => ['name' => 'Jonathan']])->toResponse($request);
147177
});
148178
});

0 commit comments

Comments
 (0)