return back()->withInput($request->input()) throws 此路由不支持 GET 方法。支持的方法:POST

return back()->withInput($request->input()) throws The GET method is not supported for this route. Supported methods: POST

如果表单中有任何错误,我会收到此错误 "The GET method is not supported for this route. Supported methods: POST."

我可以成功 post 我的表单,但它在 return 过程中抛出。

web.php

Route::post('/services/book/hotel', 'HotelController@showbook');
Route::post('/services/book/hotelroom', 'HotelController@book');

book 功能相当冗长但结束于

    if($responseSuccess){
        $error = [];
        $bookingDetail = json_decode($response['BookingDetail']);

        return Redirect::to(url('my-account'));
    } else {
        $error = $response['message'];
        $hotel = [];

        session()->flash('alert-class', 'alert-danger'); 
        session()->flash('message', $error); 

    // dd(__method__.'::'.__line__,get_defined_vars(),$request->input());
        return back()->withInput($request->input());
    }

如果我取消对 dd 的注释,我会发现就错误和输入而言,一切看起来都像我期望的那样,但是当我点击 return 时,我明白了。我究竟做错了什么?

我已经阅读了 slack 和其他网站上的数十篇文章,这些文章讨论了 "The GET method is not supported for this route. Supported methods: POST.",但其中 none 似乎在 "returning back"[=20= 时出现了问题]

我正在使用 PHP 7.2 和 Laravel/framework 6.2

如果我尝试将表单从 post 更改为 get,我会收到此错误,因为要传递大量数据。并且客户更喜欢 post 中的此内容,因此无法将其添加为书签或通过电子邮件发送。

此页面传递了很多 "hidden" 变量,我希望能够在需要时显示错误并且仍然有变量。这不可能吗?

back() 助手是使用 GET 方法重定向到页面。 如果它试图 GET /services/book/hotel/services/book/hotelroom 它将失败。

显示表格的页面的 url 是什么?

您可以使用 HTTP 307 Temporary Redirect:

return back(307)->withInput();

更好的解决方案:

不是将 <form> 操作属性从 POST 更改为 GET,而是需要更改显示表单的页面:

Route::get('/services/book/hotel', 'HotelController@showbook');
Route::post('/services/book/hotelroom', 'HotelController@book');