9

我正在使用Laravel 8并且已经安装InertiaJS,但是在我的目录中resources/views/我有一个名为的文件index.blade.php,我打算使用它InertiaJS

默认情况下,InertiaJS在该目录中查找名为app.blade.php. 我知道写以下语句:

\Inertia\Inertia::setRootView('index');

更改rootView并允许我使用我创建的文件。这似乎是一个愚蠢的问题,但据我所知,我可以做两件事..

  • 将文件重命名index.blade.phpapp.blade.php
  • 写上一句..在ServiceProviders我有的一个

我想知道以下几点:

  • InertiaJS-Laravel不允许ServiceProvider用命令发布php artisan vendor:publish(这个命令的输出没有显示任何关于这个包的发布)
  • 为了解决我的问题,我应该创建一个ServiceProviderlike:php artisan make:provider InertiaServiceProvider然后注册它?
  • 或者只是将前面的语句添加到ServiceProvider已经存在的语句中?像app/Http/Providers/RouteServiceProvider.php

你有什么建议会更好?

我想在我的项目中寻找尽可能大的组织。非常感谢您提前...

4

7 回答 7

9

更新; 在我最初的回答(20-09-2020)之后,Inertia引入了中间件来处理您的 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';
}

您可以在文档中找到更多信息。

于 2020-09-20T19:43:01.203 回答
6

更严格,只需像这样覆盖rootView方法App\Http\Middleware\HandleInertiaRequests......

public function rootView(Request $request)
{
    if ($request->route()->getPrefix() == 'admin') {
       return 'layout.admin';
    }

    return parent::rootView($request);
}
于 2021-01-16T18:37:12.417 回答
3

我认为在 App\Http\Middleware\HandleInertiaRequests 中更改它会更容易。

确保php artisan inertia:middleware在惯性服务器端安装期间运行。还将它包含在您的 Web 中间件组中。

然后转到App\Http\Middleware\HandleInertiaRequests并将$rootView属性更改为您要使用的刀片文件的名称。例子:

protected $rootView = 'index';

于 2020-12-05T16:07:48.857 回答
2

您可以在控制器内部即时执行此操作。

<?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'));
    }
}
于 2020-12-26T09:16:18.337 回答
2

替换在App\Http\Middleware\HandleInertiaRequests

    protected $rootView = 'app';

和:

    public function rootView(Request $request): string
    {
        if ($request->route()->getPrefix() === '/admin') {
            return 'admin.app';
        }
        return 'app';
    }
于 2021-01-27T09:31:53.227 回答
1

扩展@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);
}
于 2020-12-11T05:47:46.670 回答
1

在 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);
}
于 2021-09-14T09:29:53.527 回答