🙄

PATCHメソッドなのに The GET method is not supported for this route.ってなんだよ。

2022/10/10に公開

この記事でわかること

  1. PATCHメソッドのルーティングで表題のエラーが出た時の対処法がわかる
  2. なぜエラーが出たのかがわかる

問題点

個人開発してる時にHTTPメソッド PATCHのルーティングを

Route::patch('/delete/{id}', 'App\Http\Controllers\TaskController@delete')->name('delete');

って書いて実行すると

The GET method is not supported for this route. Supported methods: PATCH.

↓↓実際の画面

というエラーを吐かれた。
うっせえ!!ちゃんと動きーや!!
と思いながらも、どうにかするしかないので調べてみた!!


結論としては

まず更新対象を取得する必要があるらしいので、
HTTP GETメソッドを加えることでちゃんと動きました。

Route::get('/delete/{id}', 'App\Http\Controllers\TaskController@delete')->name('delete');
Route::patch('/delete/{id}', 'App\Http\Controllers\TaskController@delete')->name('delete');

詳細

<エラー文の確認>どこで処理が止まっている?

エラー文の詳細はこんな感じ

$response = $kernel->handle(
    $request = Request::capture()
)->send();

なんだこれ?
なんかresponseをするために何やかんやしてる?ってことかな?


<処理が止まっている部分の分析>$request = Request::capture()とは

$request = Request::capture()
で調べてみるといろんな記事と出会ったけど、
どうやらこれはHTTPリクエストからレスポンスを返すまでの流れってことらしい。
以下3つのサイトを参考に自分なりにまとめてみると、

$response = $kernel->handle(
    $request = Request::capture()
)->send();

は、要するに

ってことらしい。

ってことは、リクエストの内容が正しくないよ!!
っていうことになりますね。
そりゃそうか。

https://it.becrazy.jp/article/laravel-lifecycle
https://tech-tech.blog/php/laravel/request/
https://codezine.jp/article/detail/11370


The GET method is not supported for this route.を見直す

で、もう一度最初のエラー文を見返してみる。

The GET method is not supported for this route. Supported methods: PATCH.

このルートではGETメソッドはサポートされていません。って言われています。
なんだ? GETメソッドが必要なのか?
って思っていましたが、こちらの記事で解決できました。
https://qiita.com/kuroudoart/items/44eca2150f102ba7fdb4

どうやらpatchやputは一度更新するデータを取得した上で処理をする流れらしい。
なので、エラー文を砕いて解釈すると

ってことらしいです。

なので、GETメソッドを追記することで更新する対象のデータを取得し、PATCHで更新する
というコードを書く必要があったってことらしいです。

解釈間違ってたらすみません。。。

Discussion