如何在Blade中使用前缀路由?获取admin/subjects路由遇错误
解决Laravel Blade中获取admin/subjects路由失败的问题
我来帮你排查这个问题,核心原因是对Laravel资源路由的命名规则理解有偏差,咱们一步步来解决:
第一步:确认路由的实际命名
首先得搞清楚这条resource路由到底生成了哪些命名路由。打开终端,在项目根目录下运行这条命令:
php artisan route:list
你会看到针对subjects路由的类似条目:
| GET|HEAD | admin/subjects | admin.subjects.index | admin\SubjectsController@index | web | | GET|HEAD | admin/subjects/create | admin.subjects.create | admin\SubjectsController@create | web | | POST | admin/subjects | admin.subjects.store | admin\SubjectsController@store | web | | GET|HEAD | admin/subjects/{subject}| admin.subjects.show | admin\SubjectsController@show | web |
能看到吧?你的Route::resource('subjects','admin\SubjectsController')在admin前缀组里,生成的路由名称都是admin.subjects.xxx的格式——比如你能访问的列表页对应的路由名称是admin.subjects.index,而不是你可能误以为的admin.subjects。
第二步:在Blade中正确调用路由
知道正确的路由名称后,在Blade模板里就能正常生成链接了。比如要生成访问http://localhost/quizl/admin/subjects的链接,应该这么写:
<a href="{{ route('admin.subjects.index') }}">查看所有科目</a>
如果是跳转创建科目页面,就用route('admin.subjects.create');编辑某个科目需要传参数:route('admin.subjects.edit', $subject->id),其他CRUD动作以此类推。
为什么之前会出错?
你可能误以为resource路由的基础名称就是admin.subjects,但Laravel的resource路由会自动为每个CRUD动作添加后缀(.index、.create等),直接用route('admin.subjects')会找不到对应路由,自然就报错了。
内容的提问来源于stack exchange,提问作者Purushotam Sangroula
相关产品推荐
相关产品推荐

