Laravel 8 returns 404 未找到
Laravel 8 returns 404 Not Found
我正在用 Laravel 8 创建一个论坛,基本上每当用户在这个论坛上提问时,它应该被重定向到问题。
而且我还想根据问题的slug
字段进行重定向处理
所以为了做到这一点,我在 postForm()
方法的末尾添加了这个:
return redirect('questions/{slug}');
这里是看题的路径:
Route::get('questions/{slug}' , [QuestionController::class, 'showQuestion']);
然后我在控制器上编码:
public function showQuestion($slug)
{
$show = Question::find($slug);
if(is_null($show)){
abort(404);
}
return view('questions.question',[
'show' => $show
]);
}
但现在的问题是,当我尝试添加新问题时,问题会成功添加,但它会将我重定向到 404
页面。重定向后 URL 也看起来像这样:
http://localhost:8000/questions/%7Bslug%7D
但是,如果我尝试在 /questions/
之后手动添加一个 slug
- 它已经存在于数据库中 - 我仍然会遇到相同的 404
错误!
那么这里出了什么问题?如何通过每个问题的 slug
正确地将用户重定向到该路由?
如果你能帮我解决这个问题,我将不胜感激...
您可以做两件事。
您可以如下更改路线
Route::get('questions/{question:slug}' , [QuestionController::class, 'showQuestion']
在您的控制器中,您可以使用依赖注入,如下所示
public function showQuestion(Question $question)
{
return view('questions.question',[
'show' => $question
]);
}
- 您可以将查询从 find 更改为 where
public 函数 showQuestion($slug)
{
$show = Question::where('slug', $slug)->first();
if(is_null($show)){
abort(404);
}
return view('questions.question',[
'show' => $show
]);
}
我正在用 Laravel 8 创建一个论坛,基本上每当用户在这个论坛上提问时,它应该被重定向到问题。
而且我还想根据问题的slug
字段进行重定向处理
所以为了做到这一点,我在 postForm()
方法的末尾添加了这个:
return redirect('questions/{slug}');
这里是看题的路径:
Route::get('questions/{slug}' , [QuestionController::class, 'showQuestion']);
然后我在控制器上编码:
public function showQuestion($slug)
{
$show = Question::find($slug);
if(is_null($show)){
abort(404);
}
return view('questions.question',[
'show' => $show
]);
}
但现在的问题是,当我尝试添加新问题时,问题会成功添加,但它会将我重定向到 404
页面。重定向后 URL 也看起来像这样:
http://localhost:8000/questions/%7Bslug%7D
但是,如果我尝试在 /questions/
之后手动添加一个 slug
- 它已经存在于数据库中 - 我仍然会遇到相同的 404
错误!
那么这里出了什么问题?如何通过每个问题的 slug
正确地将用户重定向到该路由?
如果你能帮我解决这个问题,我将不胜感激...
您可以做两件事。
您可以如下更改路线
Route::get('questions/{question:slug}' , [QuestionController::class, 'showQuestion']
在您的控制器中,您可以使用依赖注入,如下所示
public function showQuestion(Question $question)
{
return view('questions.question',[
'show' => $question
]);
}
- 您可以将查询从 find 更改为 where
public 函数 showQuestion($slug) {
$show = Question::where('slug', $slug)->first();
if(is_null($show)){
abort(404);
}
return view('questions.question',[
'show' => $show
]);
}