我有两条路线:
Route::get('subjects/{subject}/{tag?}', 'SubjectController@show');
Route::get('subjects/{subject}/{tag}/{lesson}','LessonController@show');
当我点击第一条路线时,它正常工作但是当我点击第二条路线时,我收到以下错误响应:
抱歉,找不到您要查找的页面。
这是因为laravel试图将第二条路线的/{tag}/{lesson}
部分视为第一条路线的参数值吗?
我的控制器方法如下:
//SubjectController.php
public function show($subjectSlug, $tag = null)
{
dd('Inside SubjectController@show');
}
//LessonController.php
public function show(Subject $subject, Tag $tag, Lesson $lesson)
{
dd('Inside LessonController@show');
}
当我访问时,比方说,
本地主机:3000 /受试者/ mysubject-蛞蝓/ 1
它匹配第一条路线并作出相应的响应,但是当我访问时,
本地主机:3000 /受试者/ mysubject-蛞蝓/ 1 / mylesson-蛞蝓
它显示页面未找到错误。我该如何解决这个问题?
答案 0 :(得分:0)
尝试将控制器更改为
//LessonController.php
public function show($subject, $tag, $lesson)
{
dd('Inside LessonController@show');
}
看看它是否被击中。如果是,则绑定操作不正确。
在旁注中,我想你没有在路线文件中设置Route::resource()
某个地方?
答案 1 :(得分:0)
正如评论中所提到的,由于路径模型绑定,当无法检索绑定模型时,最终可能会得到404。使用隐式路由模型绑定时,默认情况下将使用主键进行搜索。可以在模型上更改此值以使用其他字段,在本例中为slug
字段。
"如果您希望模型绑定在检索给定模型类时使用
id
以外的数据库列,则可以覆盖Eloquent模型上的getRouteKeyName
方法&#34; < / p>Laravel 5.5 Docs - Routing - Route Model Binding - Implicit Binding
public function getRouteKeyName()
{
return 'slug';
}