You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将Laravel项目自定义Blade视图连接到Jetstream自动创建的路由?

问题分析与解决方案

看起来你在这里混淆了Jetstream的两种实现逻辑——你想沿用课程里的纯Blade模板开发方式,但路由代码却用了Inertia.js的渲染方法,这就是报错的核心原因!

为什么会出现这个错误?

Inertia::render()是Jetstream搭配Inertia栈时用来加载Vue/React前端组件的方法(组件默认放在resources/js/Pages目录下),但你创建的是Blade视图文件(存放在resources/views下)。当你用Inertia::render('post.index')时,它会试图去匹配前端组件,找不到的情况下又触发了Inertia默认的Blade布局逻辑,导致它去寻找名为app的Blade视图,最终抛出View [app] not found的错误。

快速修复步骤

1. 修改路由为Blade视图加载方式

把你的/post路由改成Laravel原生的view()方法,直接加载你创建的Blade文件:

Route::get('/post', function () {
    return view('Posts.index', [
        'canLogin' => Route::has('login'),
        'canRegister' => Route::has('register'),
        'laravelVersion' => Application::VERSION,
        'phpVersion' => PHP_VERSION,
    ]);
});

这里的Posts.index对应你创建的resources/views/Posts/index.blade.php文件,路径匹配完全没问题。

2. 确保Blade视图的布局引用正确

Posts/index.blade.php开头,要正确引用你的布局文件:

@extends('Layouts.app')

@section('content')
    <!-- 这里写你的帖子列表内容 -->
@endsection

同时,Layouts/app.blade.php里必须包含@yield('content'),用来渲染子视图的内容,比如:

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <!-- 头部元信息、样式等 -->
</head>
<body>
    <!-- 导航栏等公共布局内容 -->
    <main>
        @yield('content')
    </main>
    <!-- 脚本等 -->
</body>
</html>

3. 确认Jetstream的栈类型匹配

你安装的是Jetstream + Livewire栈,这个栈本身就是基于Blade模板的,所以认证相关的登录、注册、仪表盘功能的视图都是Blade文件,不需要额外调整,只要保证自定义路由用view()加载Blade即可。

额外注意事项

  • 检查文件路径的大小写:在Linux/Mac系统下,Laravel对视图文件的大小写是敏感的,确保LayoutsPosts目录名、文件名和你在view()里写的一致。
  • 如果你之前误操作引入了Inertia相关依赖,也可以保留它——只要自定义路由不用Inertia::render()就不会影响Blade模板的使用。

内容的提问来源于stack exchange,提问作者Benedict Onyeka

火山引擎 最新活动