Laravel 9结合Inertia配置路由遇问题,求正确实现方案
问题分析与解决方法
你的问题出在路由定义逻辑上:
- 你已经通过
Route::resource('/user', UserController::class)生成了完整的CRUD资源路由,其中已经包含了GET /user/create路由,对应UserController的create方法,路由名称为user.create。 - 后面单独写的
Route::resource('/create',[UserController::class,'create'])->name('create')是错误用法——resource路由是用来批量生成一组CRUD路由的,不能仅指定单个方法,这行代码无效,甚至可能引发路由冲突。
正确实现方式
方式一:使用资源路由自带的create路由(推荐)
直接保留已有的资源路由即可,无需额外定义create路由:
// routes/web.php Route::middleware(['auth:sanctum',config('jetstream.auth_session'),'verified'])->resource('/user',UserController::class);
此时可通过以下方式访问create页面:
- 访问URL:
/user/create - 在Vue组件中通过Inertia跳转:
<button @click="router.push({ name: 'user.create' })">创建用户</button>
方式二:单独定义create路由(仅当不需要完整资源路由时使用)
如果不需要完整的CRUD资源路由,只想单独定义create路由,应该用Route::get而非resource:
// routes/web.php Route::middleware(['auth:sanctum',config('jetstream.auth_session'),'verified']) ->get('/create', [UserController::class, 'create']) ->name('create');
此时访问URL为/create,路由名称为create,Vue中跳转代码:
<button @click="router.push({ name: 'create' })">创建用户</button>
额外检查项
确保你的Vue组件Create.vue存在于resources/js/Pages/目录下,Inertia才能正确渲染该组件。
内容的提问来源于stack exchange,提问作者Kvothe_0077
相关产品推荐
相关产品推荐

