データを更新する時には、PUTまたはPATCHメソッドを使います。ただ、この2つのメソッドは使い分ける必要はありません。
使い分け不要な理由と2つのメソッドの違い、そしてLaravelでの設定方法を解説していきますね。
「なぜ2つも似たようなメソッドがあるの?」
「間違ったほうを使ったら、デメリットとかある?」
と疑問に感じたら、読んでください。
わたしも、この2つの違いが最初よく分かりませんでした。
本記事を読んでスッキリしてもらえたら嬉しいです。
PUTとPATCHとは?いつ使われる?
まずPUTとPATCHとは何か?から説明しますね。
多くのWebアプリケーションでは投稿内容のCreate(作成)・Read(読み出し)・Update(更新)・Delete(削除)という処理が必要になります。
この処理は、頭文字を取ってCRUD(クラッド)と呼びます。
【CRUD処理】
① C | create | 新規作成 |
② R | read | 読み出し |
③ U | update | 更新 |
④ D | delete | 削除 |
PUTとPATCHメソッドは、この中でUpdate(更新)処理を行う時に使われます。2つの違いは、次のとおりです。
- PUT:全体を更新
- PATCH:部分的に更新
PUTとPATCHの使い分け不要だと判断できる理由
上記のような違いがあるものの、PUTにせよPATCHにせよ、HTTPメソッドを指定しただけでは処理は変わりません。
Laravelの場合はフォームを通じて送信された内容は、ルート設定を経て、コントローラーで処理が行われます。
つまりコントローラーの処理が同じなら、どちらのメソッドでも同じ結果となります。
HTTPメソッド変えただけじゃ、処理内容は変わらないってことですね。
こういった意味で、わたしは、更新時にPUTとPATCHを使い分ける必要はないと判断しています。
PUTもPATCHも同じ【更新】のためのメソッドですし。
ただ結論としては、使い分けても分けなくても、どちらでもOK
ただもちろん、ちゃんと使い分けたい場合は、使い分けてください。
結論としては、あなたのお好みで良いと思います。
大雑把な結論でなんですが
補足として、処理負荷の関係で使い分けたほうが効率が良い場合もあります。
たとえば、ものすごい大きなファイルを更新するときなど。一部を更新するか、全体を更新するかで処理の負荷が大きく変わってきますよね。
ただこの場合には、PUTとPATCHというHTTPメソッドだけを変えるのではなく、それぞれ異なる処理をコントローラーに設定しておく必要があります。
Laravelの中でのPUTとPATCHの設定方法
では次に、Laravelの中でのHTTPメソッドの設定方法を説明しますね。
Laravelでは、リソースコントローラを使う時は、Route::resource を使ってルート設定をします。
【リソールコントローラー使用時のルート設定例】
1 |
Route::resource('/new', 'NewController'); |
すると次のようなルート設定が自動で作成されます。
【リソースコントローラのルート設定】
ご覧頂いているとおり、更新処理はPUT/PATCHとなっています。
つまり、Laravelで更新処理を行う場合には、ルート設定はPUTでもPATCHでもどちらでもOK、ということになります。
ビューファイル(blade.php) 内のフォーム で、どちらかの処理を指定します。選択した処理は、@methodの後の括弧の中に入れておきます。
【フォーム例(PATCHを入れた場合)】
1 2 3 |
<form method="post" action="{{route('post.update', $post)}}"> @csrf @method('PATCH') |
リソースコントローラを使わない時は、各ルート設定でHTTPメソッドを指定します。このときも、PUTでもPATCHでもお好きな方を指定できます。
Laravelでの注意点:ビューファイルとルート設定のHTTPメソッドは統一しましょう。
ただこの時ひとつ、注意点があります。
個別にルート設定を行うときは、ビューファイルとルート設定で、HTTPメソッドを統一するようにしてくださいね。
たとえばビューファイル(blade.php) 内のフォーム でPATCHメソッドを使っていたら、ルート設定でもPATCHメソッドを使って合わせる必要があります。
【フォームでPATCHを指定】
1 2 3 |
<form method="post" action="{{route('post.update', $post)}}"> @csrf @method('PATCH') |
【ルート設定でもPATCHを指定】
1 |
Route::PATCH('/post/update', 'PostController@update'); |
ここで、たとえばビューファイルではPUTメソッド、ルート設定ではPATCHメソッドを使うと、エラーになります。
メソッド間違いには、ご注意を。
「このルートにはPUTメソッドはサポートされません。PATCHメソッドにしてね」
さいごに
今回解説したPUTとPATCHの使い分けについて、Laravelの公式ドキュメントに説明がないか探してみたものの、明確なものは見当たりませんでした。
Laravel自体の機能ではないためだと思います。
そこで本記事で解説してみました。
「使い方がわかってスッキリした!」と思って頂けたら嬉しいです。
なお今回はCRUD処理やリソースコントローラーなど色々紹介しましたが、これらはLaravelでWebアプリを作る上で必須の知識になります。
実際にどう使っていくかは、「Laravelの教科書」という学習サイトで紹介しています。学習を通じて、CRUD処理を実践しつつ会員制のWebアプリを作成していきます。
登録は無料です。興味があれば、下記をクリックして詳細を見てくださいね。