Laravel перенаправление с контроллера дает ошибку "метод не поддерживается для этого маршрута" - PullRequest
0 голосов
/ 08 мая 2020

У меня есть маршрут, который поддерживает PUT:

Route::put('/products/{id}/cancel/', 'ProductController@cancel')->where('id', '[0-9]+');


После того, как контроллер обновит состояние продукта, он должен перенаправить на другой маршрут:

return redirect('products')->with('success', 'Produto cancelado');

, что указывает на

Route::get('/products', 'ProductController@list')->name('products');


Все работает до перенаправления. Продукт обновлен, но перенаправление выдает ошибку, не поддерживающую метод:

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
The PUT method is not supported for this route. Supported methods: GET, HEAD


Я также пробовал следующие перенаправления:

return redirect('/products/')->with('success', 'Produto cancelado');

и

return redirect()->route('products')->with('success', 'Produto cancelado');


Как передается метод PUT? Должен ли я явно вызывать метод GET при перенаправлении?

Как мне решить эту проблему?


РЕДАКТИРОВАТЬ: Я отправляю PUT из HTTP-запроса. Итак, я возвращаюсь к функции JS. Я хочу перейти к представлению, которое принимает ->.


EDIT2: я могу вернуть представление, но оно отображается только в сети> предварительный просмотр инструментов разработчика.

return view('pages.products')->with('success', 'Produto cancelado');

Но мне это, очевидно, нужно в окне.

Я мог бы перенаправить в js, но в этом случае я не показываю сообщения fla sh в частичном клинке.


Не знаю, что делать.

Спасибо

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

В итоге я обманул:


Я добавил новый маршрут PUT:

Route::put('/products', 'ProductController@list')->name('products_put');


контроллер возвращает:

return redirect()->route('products')->with('success', 'Produto cancelado',200);


, а обработчик ответа обманывает:

document.write(this.responseText);
window.history.pushState('products', 'eBaw · online shopping', '/products');
0 голосов
/ 08 мая 2020

Ошибка не в методе GET. ошибка говорит о том, что метод put не поддерживается

Route::put('/products/{id}/cancel/', 'ProductController@cancel')->where('id', '[0-9]+');

Если вы попробуете это как domainname.com/products/5/cancel, определите его, как показано ниже.

Route::get('products/{id}/cancel', 'ProductController@cancel')->where('id', '[0-9]+');
...