return back () -> withInput ($ request-> input ()) throws Метод GET не поддерживается для этого маршрута. Поддерживаемые методы: POST - PullRequest
0 голосов
/ 07 января 2020

Я получаю эту ошибку "Метод GET не поддерживается для этого маршрута. Поддерживаемые методы: POST." , если в форме есть ошибки.

Я могу успешно опубликовать свою форму, но она выдает в процессе возврата.

web. php

Route::post('/services/book/hotel', 'HotelController@showbook');
Route::post('/services/book/hotelroom', 'HotelController@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, я вижу, что все выглядит так, как я ожидал бы, что касается ошибок и входных данных, но когда я нажимаю возврат, я вижу. Что я делаю неправильно?

Я прочитал здесь десятки статей на слабых и других сайтах, в которых говорится о том, что «метод GET не поддерживается для этого маршрута. Поддерживаемые методы: POST». но ни у одного из них, похоже, нет проблемы при "возврате back"

enter image description here

Я использую PHP 7.2 и Laravel / framework 6.2

enter image description here

Если я пытаюсь изменить форму с поста на получение, я получаю эту ошибку, потому что передается много данных. И клиент предпочитает это в сообщении, чтобы его нельзя было добавить в закладки или отправить по электронной почте.

enter image description here

Эта страница передает много «скрытых» переменных и я хочу иметь возможность отображать ошибки при необходимости и по-прежнему иметь переменные. Разве это невозможно?

enter image description here

Ответы [ 3 ]

0 голосов
/ 07 января 2020

Вы можете использовать HTTP 307 Временное перенаправление :

return back(307)->withInput();

Лучшее решение:

Вместо изменения действия <form> атрибут от POST до GET, вам нужно изменить страницу, которая показывает форму:

Route::get('/services/book/hotel', 'HotelController@showbook');
Route::post('/services/book/hotelroom', 'HotelController@book');
0 голосов
/ 07 января 2020

Не уверен, но что если вы используете any вместо get/post

Route::any('/services/book/hotel', 'HotelController@showbook');
Route::any('/services/book/hotelroom', 'HotelController@book');
0 голосов
/ 07 января 2020

Помощник back() - это перенаправление на страницу с использованием метода GET. Если он пытается набрать GET /services/book/hotel или /services/book/hotelroom, он потерпит неудачу.

Какой URL-адрес страницы показывает форму?

...