微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel 8 返回 404 Not Found

如何解决Laravel 8 返回 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

但是,如果我尝试在 slug 之后手动添加一个 /questions/ - 已经存在于 db 中 - 我仍然会遇到相同的 404 错误

所以这里出了什么问题?如何通过每个问题的 slug用户正确重定向到该路线?

如果您能帮我解决这个问题,我将不胜感激...

解决方法

你可以做两件事。

  1. 您可以按照以下方式更改您的路线

    Route::get('questions/{question:slug}',[QuestionController::class,'showQuestion']

在您的控制器中,您可以使用如下依赖注入

public function showQuestion(Question $question)
{
  
    return view('questions.question',[
        'show' => $question
    ]);
}
  1. 您可以将查询从 find 更改为 where

公共函数showQuestion($slug) {

    $show = Question::where('slug',$slug)->first();

    if(is_null($show)){
        abort(404);
    }

    return view('questions.question',[
        'show' => $show
    ]);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。