🐘

Laraevl でルートモデル結合(Route Model Binding)を使う

2024/09/25に公開

ルートモデル結合 is 何?

その昔「なにそれ?」ってなったのでまとめた記録.

ルートモデル結合(Route Model Binding)は Laravel が提供する強力な機能の一つで,ウェブルート(URL)のパラメータを自動的にモデルのインスタンス(今回は Tweet のデータ)に変換する仕組みである.

例えば,ルーティングに以下のように設定されている場合,通常,{post} パラメータは投稿の ID を表す.ルートモデル結合を使用すると,PostController の show メソッドには、ID に基づいてデータベースから検索された Post モデルのインスタンスが直接渡される.

// web.php

🔽 パラメータに {post} (← モデル名小文字)を指定
Route::get('/posts/{post}',  [PostController::class, 'show']);
// PostController.php

// 🔽 引数に直接 Post モデルを指定できる
public function show(Post $post)
{
  return view('posts.show', compact('post'));
}

コントローラ作成時に --resource オプションを指定して実行するとルートモデル結合が自動的に設定される.ルートモデル結合は必ず使用しなければならないわけではないが,下記の利点がある.

  • コードの簡素化: モデルの検索ロジックをルートやコントローラーから取り除き,コードを簡潔に保つことができる.

  • 自動的な 404 エラー応答: モデルが見つからない場合,Laravel は自動的に 404 エラー応答を返す.これにより,手動でモデルが存在するかどうかをチェックする必要がなくなる.

まとめ

とても強力なので基本使用する姿勢でいく.

以上だ( `・ω・)b

GitHubで編集を提案

Discussion