Laravelのビューでrouteを使ってリンクを作る時にパラメーターを渡す方法

Laravelのビューでrouteを使ってリンクを作る時にパラメーターを渡す方法

268 回閲覧されました

みなさんこんにちは、jonioです。

Laravelでページにリンクをつけるのはよくありますがパラメーターを渡す方法を頻繁に忘れるのですぐ思い出せるようにこの記事を残します。

方法は2通りあると思います。

  • idを使う
  • モデルを使う

それぞれ解説します。

idを使う場合

ルーティングを下記にします。

Route::controller(WorkController::class)->group(function(){
    Route::get('/work/edit/{id}', 'edit')->name('work.edit');
});

2行目の「id」をビューに渡します。

コントローラーを下記にします。

public function edit($id)
{
  $work_content = Work::find($id);
  
  return view('work.edit', compact('work_content'));
}

1行目の「$id」はルーティングから渡します。

ビューを下記にします。

<a href="{{ route('work.edit', ['id' => $work_content]) }}">編集</a>

「[‘id‘ => $work_content]」のidはルーティングから渡ってきたid$work_contentはコントローラーから渡ってきた$work_contentです。

これで該当する編集のページに入ることができます。

モデルを使う場合

Workモデルを使うとします。

Route::controller(WorkController::class)->group(function(){
    Route::get('/work/edit/{work}', 'edit')->name('work.edit');
});

2行目のworkはモデル名のWorkの最初の文字を小文字にしています。

コントローラーを下記にします。

public function edit(Work $work)
{
  return view('work.edit', compact('work'));
}

ビューを下記にします。

<a href="{{ route('work.edit', ['work' => $work]) }}">編集</a>

「[‘work‘ => $work]」のworkはルーティングから渡ってきたworkで$workはコントローラーから渡ってきた$workです。

使い分け

メソッドインジェクションを使った時はモデルを使った書き方でそれ以外はidを使った書き方にすればいいと思いました。

メソッドインジェクションを知らない方は下記の記事をどうぞ。