更改 InertiaJS-Laravel 默认 RootView
Change InertiaJS-Laravel default RootView
我正在使用 Laravel 8
并且我已经安装了 InertiaJS
,但是在我的目录 resources/views/
中我有一个名为 index.blade.php
的文件,我打算将其与 InertiaJS
.
默认情况下,InertiaJS
在该目录中查找名为 app.blade.php
的文件。我知道写以下语句:
\Inertia\Inertia::setRootView('index');
更改 rootView
并允许我使用我创建的文件。这似乎是一个愚蠢的问题,但据我所知,我可以做两件事..
- 将文件
index.blade.php
重命名为 app.blade.php
- 把前面的句子..写在我有的
ServiceProviders
中
我想知道以下问题:
InertiaJS-Laravel
不允许使用命令 php artisan vendor:publish
发布 ServiceProvider
? (这个命令的输出没有显示任何关于这个包的发布)
- 为了解决我的问题,我应该创建一个
ServiceProvider
,例如:php artisan make:provider InertiaServiceProvider
然后注册它?
- 或者只是将前面的语句添加到已经存在的
ServiceProvider
之一?喜欢 app/Http/Providers/RouteServiceProvider.php
你推荐什么比较好?
我想在我的项目中寻找尽可能大的组织。非常感谢您...
更新;在我初步回答后(20-09-2020),Inertia introduced middleware 来处理您的 Inertia 请求。
如以下答案所述,您可以使用命令php artisan inertia:middleware
生成此中间件。您可以设置根索引:
// Set root template via property
protected $rootView = 'app';
// OR
// Set root template via method
public function rootView(Request $request)
{
return 'app';
}
您可以找到更多信息 in the docs。
我认为在 App\Http\Middleware\HandleInertiaRequests 中更改它会更容易。
惯性server-side安装时一定要运行php artisan inertia:middleware
。
还将其包含在您的网络中间件组中。
然后转到 App\Http\Middleware\HandleInertiaRequests
并将 $rootView
属性 更改为您要使用的 blade 文件的名称。示例:
protected $rootView = 'index';
扩展的@Olu Udeh 回答
覆盖 App\Http\Middleware\HandleInertiaRequests
中间件的句柄方法
public function handle(Request $request, Closure $next)
{
if($request->route()->getPrefix() == 'admin'){
$this->rootView = 'layouts.admin';
}
return parent::handle($request, $next);
}
您可以在控制器中即时执行此操作。
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Inertia\Inertia;
class NewsController extends Controller
{
public function index()
{
Inertia::setRootView('layouts.news');
$users = User::all();
return Inertia::render('News/Index', compact('users'));
}
}
更严格,像这样覆盖App\Http\Middleware\HandleInertiaRequests
中的rootView
方法...
public function rootView(Request $request)
{
if ($request->route()->getPrefix() == 'admin') {
return 'layout.admin';
}
return parent::rootView($request);
}
替换为App\Http\Middleware\HandleInertiaRequests
protected $rootView = 'app';
与:
public function rootView(Request $request): string
{
if ($request->route()->getPrefix() === '/admin') {
return 'admin.app';
}
return 'app';
}
在 laravel 8 这对我有用
App\Http\Middleware\HandleInertiaRequests
代码
public function rootView(Request $request)
{
if(request()->is('admin/*') or request()->is('admin'))
{
return 'admin';
}
return parent::rootView($request);
}
我正在使用 Laravel 8
并且我已经安装了 InertiaJS
,但是在我的目录 resources/views/
中我有一个名为 index.blade.php
的文件,我打算将其与 InertiaJS
.
默认情况下,InertiaJS
在该目录中查找名为 app.blade.php
的文件。我知道写以下语句:
\Inertia\Inertia::setRootView('index');
更改 rootView
并允许我使用我创建的文件。这似乎是一个愚蠢的问题,但据我所知,我可以做两件事..
- 将文件
index.blade.php
重命名为app.blade.php
- 把前面的句子..写在我有的
ServiceProviders
中
我想知道以下问题:
InertiaJS-Laravel
不允许使用命令php artisan vendor:publish
发布ServiceProvider
? (这个命令的输出没有显示任何关于这个包的发布)- 为了解决我的问题,我应该创建一个
ServiceProvider
,例如:php artisan make:provider InertiaServiceProvider
然后注册它? - 或者只是将前面的语句添加到已经存在的
ServiceProvider
之一?喜欢app/Http/Providers/RouteServiceProvider.php
你推荐什么比较好?
我想在我的项目中寻找尽可能大的组织。非常感谢您...
更新;在我初步回答后(20-09-2020),Inertia introduced middleware 来处理您的 Inertia 请求。
如以下答案所述,您可以使用命令php artisan inertia:middleware
生成此中间件。您可以设置根索引:
// Set root template via property
protected $rootView = 'app';
// OR
// Set root template via method
public function rootView(Request $request)
{
return 'app';
}
您可以找到更多信息 in the docs。
我认为在 App\Http\Middleware\HandleInertiaRequests 中更改它会更容易。
惯性server-side安装时一定要运行php artisan inertia:middleware
。
还将其包含在您的网络中间件组中。
然后转到 App\Http\Middleware\HandleInertiaRequests
并将 $rootView
属性 更改为您要使用的 blade 文件的名称。示例:
protected $rootView = 'index';
扩展的@Olu Udeh 回答
覆盖 App\Http\Middleware\HandleInertiaRequests
中间件的句柄方法
public function handle(Request $request, Closure $next)
{
if($request->route()->getPrefix() == 'admin'){
$this->rootView = 'layouts.admin';
}
return parent::handle($request, $next);
}
您可以在控制器中即时执行此操作。
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Inertia\Inertia;
class NewsController extends Controller
{
public function index()
{
Inertia::setRootView('layouts.news');
$users = User::all();
return Inertia::render('News/Index', compact('users'));
}
}
更严格,像这样覆盖App\Http\Middleware\HandleInertiaRequests
中的rootView
方法...
public function rootView(Request $request)
{
if ($request->route()->getPrefix() == 'admin') {
return 'layout.admin';
}
return parent::rootView($request);
}
替换为App\Http\Middleware\HandleInertiaRequests
protected $rootView = 'app';
与:
public function rootView(Request $request): string
{
if ($request->route()->getPrefix() === '/admin') {
return 'admin.app';
}
return 'app';
}
在 laravel 8 这对我有用
App\Http\Middleware\HandleInertiaRequests
代码
public function rootView(Request $request)
{
if(request()->is('admin/*') or request()->is('admin'))
{
return 'admin';
}
return parent::rootView($request);
}