おそらくまたいつかやり方を忘れてしまうので忘備録として記事に残しました。
ルートモデルバインディングとクエリパラメータを持ったURLを生成する方法
- route()の第二引数に配列として渡す
(生成されるURL: localhost/sample/1?parameter=渡したいパラメータ)
route('sample', ['user' => $user, 'parameter' => '渡したいパラメータ']);
サンプルコード
ルーティング
Route::get('/user/{user}', SampleCotroller::class)->name('sample');
コントローラ
class SampleCotroller extends Controller
{
public function __invoke(User $user)
{
return $user->name;
}
}
- ルートモデルバインディングのみのURL生成
(生成されるURL: localhost/sample/1)
// userモデルのオブジェクトを渡している
route('sample', $user);
- クエリパラメータのみを渡したURL生成
(生成されるURL: localhost/sample?parameter=渡したいパラメータ)
route('sample', ['parameter' => '渡したいパラメータ']);
ルートモデルバインディングとは
- laravelの機能でルーティングでコントローラを呼び出す際にモデルのidを渡すとそのコントローラ内でそのモデルが取得できて使用したりすることができる便利なもの
laravelのヘルパ関数 route()について
- route関数は、指定した名前付きルートのURLを生成します。
- https://readouble.com/laravel/10.x/ja/helpers.html#method-route
終わりに
- クエリパラメータだけ、モデルバインディングだけのURL生成はよくやっていたのですが、同時に渡したい時があり少し迷ったので、同じ人のためになれば幸いです。