【问题标题】:Laravel 8 returns 404 Not FoundLaravel 8 返回 404 Not Found
【发布时间】:2021-06-03 11:03:16
【问题描述】:

我正在用 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 - db 中已经存在 - 我仍然会得到相同的 404 错误!

那么这里出了什么问题?如何通过每个问题的slug 正确地将用户重定向到该路由?

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

【问题讨论】:

  • 您需要将要重定向到的实际 slug 放入 redirect('questions/{slug}') 而不是 {slug}

标签: php laravel eloquent laravel-8 slug


【解决方案1】:

你可以做两件事。

  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
    ]);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-05
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多