#php #laravel #post #get #routing
#php #laravel #Публикация #получить #маршруты
Вопрос:
Я создал маршрут для покупки товара в laravel 5.7
Route::post('/buy/item', "userController@buy_item")->name('buy_item_form');
Все работает нормально, но когда я обновляю страницу (заменяю на GET Request) Я получил
Исключение MethodNotAllowedHttpException.
Маршрут GET не существует, он должен возвращать ошибку 404.
Я не понимаю, почему он возвращает мне это исключение.
Ответ №1:
Вы используете post, с post у вас есть токен @csrf. когда вы нажимаете на обновить, вы выполняете метод GET вместо post и, следовательно, получаете метод not allow exception. Если вы не отправляете данные, вы можете изменить их на метод get [Route::get].
Если вы хотите принять 2 метода [post, get], чтобы улучшить работу и справиться с возможными ошибками. Вы можете принять 2 метода на маршруте, такие как:
Route::match(array('GET','POST'),'/buy/item', 'userController@buy_item')->name('buy_item_form');
И на контроллере определите, что делать, основываясь на методе.
if (Request::isMethod('get')){
// redirect user
}
if (Request::isMethod('post')){
// do logic for post method
}
Комментарии:
1. Я не создавал GET route. итак, почему я получил исключение при запросе GET, если маршрут не существует. Это должно вернуть мне ошибку 404.
2. когда вы обновляете страницу или переходите на нее с помощью метода get , если вы отправляете данные и устанавливаете для метода в форме значение post, он будет публиковать информацию вместо get. w3schools.com/tags/ref_httpmethods.asp
3. Я имею в виду, что я создал маршрут Post, и когда я пишу URL маршрута post в строке URL-адреса в моем браузере (делаю запрос get), он возвращает исключение, а не ошибку 404. Я могу создать get route, который выполнит прерывание (404), но в любом случае это не должно произойти?
4. добавьте это в свой код, и вы увидите, что вы выполняете get по маршруту обновления::get(‘/buy/item’, function(){ возвращает «Get Request»; });
5. Я могу сделать это: Route:: get(‘/buy / item’, function(){return abort(404)}); Но мой вопрос в том, почему это не происходит автоматически.