laravel

Laravelで「The POST method is not supported for this route.」というエラーが出た場合の解決方法

「The POST method is not supported for this route. 」というエラーが出た場合の解決方法を紹介します。

結論:疑似フォームを使えばOK

ソース(Restful)コントローラーの場合、更新の処理などはPUTなどで行われます。

この処理は通常のフォームタグはサポートしていません。

解決するには疑似フォームを使います。

疑似フォームの書き方

公式ドキュメント(ルーティング)の疑似フォームメソッドを参考に書いていきます。

HTMLフォームは、PUTPATCHDELETEアクションをサポートしていません。したがって、HTMLフォームから呼び出されるPUTPATCH、またはDELETEルートを定義するときは、フォームに非表示の_methodフィールドを追加する必要があります。_methodフィールドで送信された値は、HTTPリクエストメソッドとして使用します。

_methodフィールドを追加しつつ、挙動を確認します。

現在のコードを以下だとします。

<form method="post"
action="{{ route('admin.update', ['admin' => $admin->id]) }}">
@csrf
</form>

PUTメソッドを明示します。

<form method="post"
action="{{ route('admin.update', ['admin' => $admin->id]) }}">
@method('PUT')
@csrf
</form>

以上でOKです。

-laravel

© 2021 ストロテクトNote