🙄
PATCHメソッドなのに The GET method is not supported for this route.ってなんだよ。
この記事でわかること
- PATCHメソッドのルーティングで表題のエラーが出た時の対処法がわかる
- なぜエラーが出たのかがわかる
問題点
個人開発してる時に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();
は、要するに
ってことらしい。
ってことは、リクエストの内容が正しくないよ!!
っていうことになりますね。
そりゃそうか。
The GET method is not supported for this route.を見直す
で、もう一度最初のエラー文を見返してみる。
The GET method is not supported for this route. Supported methods: PATCH.
このルートではGETメソッドはサポートされていません。って言われています。
なんだ? GETメソッドが必要なのか?
って思っていましたが、こちらの記事で解決できました。
どうやらpatchやputは一度更新するデータを取得した上で処理をする流れらしい。
なので、エラー文を砕いて解釈すると
ってことらしいです。
なので、GETメソッドを追記することで更新する対象のデータを取得し、PATCHで更新する
というコードを書く必要があったってことらしいです。
解釈間違ってたらすみません。。。
Discussion