LaravelでPOSTしているのにGETになってしまうときの確認

Laravel
  • URLをコピーしました!

Laravelのルーティングは、 routes/web.php などに記載します。
そこで POST のみとか、 GET のみを受け付けるようにルーティングを記載します。
しかし、たまに POST しているのに、GETになってしまうときがあって、よくわかんなくなることがありますので、確認ポイントをまとめました。

  1. 「登録する」などのボタンが a タグで記載されている(リンクになっている)
  2. form タグの指定が <form method="GET" となっている
  3. routeのキャッシュが残っている
  4. POSTはちゃんとしているけど、validationや権限のせいで、リダイレクトさせられている

それぞれの内容を説明します。

1. 「登録する」などのボタンが a タグで記載されている(リンクになっている)

以下のようになっていませんか?
これはサンプルHTML作成したときの名残りとか、きちんと設定しなせばすぐに解決します。

<form action="{{ route('edit_profile') }}">
  @csrf
  <input type="text" name="name" value="{{ old('name', $name) }}">
~略~
  <a href="{{ route('edit_profile') }}" class="btn btn-primary">
    登録する
  </a>
</form>

解決方法: ボタンを <button> タグで設定する

2. form タグの指定が <form method="GET" となっている

本当はPOSTにしたかったのに、なぜかGETでアクセスしている場合、formタグの指定が間違っている可能性があります。 <form medhot="GET" になっている場合、POST ではなく GET でアクセスされます。

<form action="{{ route('edit_profile') }}" method="GET">
  @csrf
  <input type="text" name="name" value="{{ old('name', $name) }}">

3. routeのキャッシュが残っている

Laravel で、なんかよくわかんないけどアクセスできないときとか、もう思い切って、キャッシュクリアするといいと思います。

キャッシュクリアしてできなかったら、別の問題だ!と考えればいいです。

4. POSTしていて、validationや権限のせいで、リダイレクトさせられている

ブラウザのデベロッパーツールを使用して、HTTPリクエストの様子をみましょう!

リダイレクトしている場合、HTTPステータス302があって、そのあと200のリクエストが発生していることが多いです。

これは、validationとかでエラーになっているので前の画面に戻されていますが、エラーメッセージの表示枠が無いためになにも表示されないので、よくわからない状況になります。

もし「登録する」などのボタンを押しても反応がない場合は、以下のソースコードを blade に挿入してみてください。

@foreach ($errors->all() as $error)
  <li>{{$error}}</li>
@endforeach

ツチノコテクノロジーでは一緒に働く仲間を募集しています!

完全リモートで働きたい方へ!

詳しくは以下をご覧ください。

ツチノコテクノロジー採用サイト

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ツチノコテックアカデミアの記事は、社内で誰かが質問してくれたことに回答したときに、ついでに記載しています!(^^)/
みんなの悩みを共有すれば、きっと誰かの役に立つと信じて更新しています!

目次