【问题标题】:return back()->withInput($request->input()) throws The GET method is not supported for this route. Supported methods: POSTreturn back()->withInput($request->input()) throws 此路由不支持 GET 方法。支持的方法:POST
【发布时间】:2020-01-06 22:49:48
【问题描述】:

我收到此错误“此路由不支持 GET 方法。支持的方法:POST。” 如果表单中有任何错误。

我可以成功发布到我的表单,但它在返回过程中抛出。

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,我会看到就错误和输入而言,一切看起来都像我预期的那样,但是当我点击返回时,我看到了。我究竟做错了什么?

我已经阅读了 slack 和其他网站上的数十篇文章,这些文章谈论“此路由不支持 GET 方法。支持的方法:POST。”但是当“返回back”时,他们似乎都没有问题

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

如果我尝试将表单从 post 更改为 get,我会收到此错误,因为传递了很多数据。客户更喜欢在帖子中使用此内容,因此无法添加书签或通过电子邮件发送。

此页面传递了许多“隐藏”变量,我希望能够在需要时显示错误并且仍然具有变量。这不可能吗?

【问题讨论】:

    标签: php laravel php-7.2 laravel-6.2


    【解决方案1】:

    您可以使用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');
    

    【讨论】:

    • 问题是我有 3 个页面发布到下一个页面,不断将数据添加到下一个表单。其中一个隐藏输入包含一个非常大的加密字段,其中包含大量数据。从一个表单发布到下一个表单有效,但如果它通过 GET 传递,则超出 url 字符串的限制。
    • 您可以将表单存储在会话中,然后在最后一步合并它们。
    【解决方案2】:

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

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

    【讨论】:

    • 是否有可以重定向到 POST 页面的助手?或者我如何重定向到 POST 表单。
    • @Lance 您无法重定向到 POST 页面。重定向只是 GET 请求。也许您应该使用验证器将错误消息发送回页面,而不是进行重定向。 laravel.com/docs/6.x/validation
    • @Lance 基于您更新的问题。您不想更改作为获取请求传递的实际数据,而是更改它们来自的页面。根据您的路线, /services/book/hotel 需要更改为 Route::get('/services/book/hotel', 'HotelController@showbook')
    • 不幸的是,该表单不是“典型”验证,因为该表单使用 api 来查看信用卡是否已成功处理以及房间是否在最近几分钟内被预订以及类似的项目获取整个函数并使其成为验证。
    • @Lance 也许最终的请求应该是 ajax 请求?通过ajax提交,如果成功则重定向到成功页面,否则处理错误。
    猜你喜欢
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 2021-04-11
    • 2019-08-31
    • 2021-05-05
    • 1970-01-01
    相关资源
    最近更新 更多