👋

ルートモデルバインディングを使おうぜ!(laravel)

2021/10/27に公開

ルートモデルバインディングって知っていますか?
言葉を知っていないとなかなか知る機会がないと思います。
めちゃめちゃ便利なので、どんどん使っていきましょうー!

ルートモデルバインディングとは

Laravel標準搭載の機能でルートからコントローラーの処理を呼び出す際にモデルのidを渡したら、そのモデル自体が取得できるという優れものです(何をいってるのかさっぱり...)

例えば、ルーティングで

Route::get("/user/{user}", [UserContoller::class, "show"])

というルーティングをしました。(※{user}がポイントです)
UserControllerのshowメソッドではこのようにします。

public function show(User $user)
{
    return view("user", ["user" => $user]);
}

これで http://127.0.0.1/user/1 にアクセスするとコントローラではIDが1であるユーザーを勝手に取得してきてくれるんです。

本来ならfindOrFailなどでIDをもとにユーザーを取得する必要があると思います。

$user = User::findOrFail($id);

この記述が不要になるということですね。

ルートモデルバインディングの懸念点というか、なんというか。

プロジェクトによっては「ルーティング」「コントローラ」「ビジネスロジック(Service層)」「DB参照・API連携(Repository層)」というふうに処理に階層構造を持たせて分けていることがあります。
モデルを使用するということはDB参照に当たるので、その規則に則るとControllerでDB参照はしてはいけないはずという考え方もできます。

まあ考え方次第なのですが、使うなら使う。使わないなら使わない。という感じでプロジェクトメンバーで共通認識を持っておくほうがいいとは思います。

というわけで今日はこの辺で。

Discussion