【问题标题】:How to redirect to a POST route in Laravel如何重定向到 Laravel 中的 POST 路由
【发布时间】:2017-08-01 16:27:12
【问题描述】:

在我的控制器中,我有一个方法应该重定向到 POST 路由。我也无法将这条路线设为GET。有什么解决办法吗?

我的控制器代码如下:

// After a bunch of other if statements, etc
return redirect('newUser')->with('user', $user);

现在我的路线(在web.php中)如下:

Route::post('/newUser', function() {
    $user=session('user');
    dd($user);
    return view('profileNewUser', $user);
});

向我抛出的错误是MethodNotAllowedHTTPException

我知道我的错误与_token 有关,无论如何我可以允许令牌字段传递吗?我尝试在重定向中使用with 传递它,但这也不起作用。

感谢您的帮助。

【问题讨论】:

  • 您要返回对POST 请求的视图?这对我来说似乎很愚蠢
  • 是的,我知道我可以直接返回视图(而不是重定向),但我需要 url 是“newUser”,而不是与我的控制器关联的用户。我也不希望任何人去 /newUser 。使用会话会更好吗?
  • 你应该检查这个答案。stackoverflow.com/a/45441085/5704410
  • 不幸的是,这个问题仍然没有答案......

标签: php laravel laravel-5 laravel-5.4


【解决方案1】:

尝试重定向到命名路由。

Route::post('/newUser', function() {
    $user=session('user');
    dd($user);
    return view('profileNewUser', $user);
})->name('newusr');

然后:

return redirect()->route('newusr', ['user'=>$user]);

或者,重定向到控制器操作。

【讨论】:

  • 命名路由或控制器操作路由执行相同。
  • 我仍然收到错误:The GET method is not supported for this route. Supported methods: POST.
【解决方案2】:

据我所知,您只能通过以下方式重定向到发布路线:

return back()->withInput(['postvar1' => 'postval1']);  // L5.5

在表单请求出错的情况下使用。

【讨论】:

    【解决方案3】:

    由于您需要将 url 设为“newUser”,因此您可以简单地为同一 url 创建一个 GET 路由。

    关于为什么要将发布请求返回到同一路由的问题仍然有效,因为它可能导致同一路由的无限调用。

    然而,一种方法是,您可以添加一个逻辑来检查用户是否已经在会话中,然后执行其他操作,否则这种模式不是很好。

    最好的方法是将返回 POST 响应的页面与呈现视图的页面分开。

    就像我在评论中建议的那样:您可以简单地将这个 getUser 路由移动到控制器中,然后使用 Laravel 的 Response to action 或其他方式。 Here is the answer 以备不时之需。

    PS:我的回答是基于我对您问题的理解。谢谢。

    【讨论】:

      【解决方案4】:

      尝试转到中间件文件夹并找到VerifyCsrfToken 文件。 aap/Http/Middleware/VerifyCsrfToken.php。然后添加你需要免于 csrf 令牌验证的路由名称

      【讨论】:

        猜你喜欢
        • 2017-06-19
        • 2019-12-23
        • 2014-07-14
        • 2014-05-04
        • 2021-07-22
        • 2021-04-26
        • 2019-05-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多