Laravelのヘルパ関数について調べる
routeヘルパ関数
route()
はLaravelのヘルパ関数の1つ。
名前付きルートへのURLを生成するために使用される。
routes/web.php
などで書いたルートの名前を使ってURLを生成するために使われる
↓で言うと->name('home')
の部分。
Route::get('/home', [HomeController::class, 'index'])->name('home');
第二引数について
route()
の第二引数へパラメータを渡すことで、リンク先へパラメータを渡すことができる。
echo route('post.show', ['post' => 1]);
// http://example.com/post/1
route()
を使って、複数のパラメータを持つルートのURLを生成することもできる
Route::get('/post/{post}/comment/{comment}', function (Post $post, Comment $comment) {
// ...
})->name('comment.show');
echo route('comment.show', ['post' => 1, 'comment' => 3]);
// http://example.com/post/1/comment/3
ルートで定義していない過剰な配列要素は、URLのクエリ文字列として処理される。
echo route('post.show', ['post' => 1, 'search' => 'rocket']);
// http://example.com/post/1?search=rocket
疑問
- 第二引数で渡せるのはid的なキーだけ?
疑問について調べた
どうやらパラメータとしてEloquentモデルも渡せるらしい。
多分こんな感じで使える
public function edit(Post $post)
{
echo route('post.show', ['post' => $post]);
}
さらにrouteヘルパによってモデルのルートキー(主キー)を自動的に抽出するらしい。
Route::resourceメソッド
ヘルパ関数じゃないけどLaravel独自のRouteファサードにあるメソッド。
1つ上のスレッドでEloquentモデルも渡していたので気になって調べた。
resourceメソッドを使わない場合はこの通り
Route::get('/users/{user}', [UserController::class, 'show'])->name('users.show');
このルートにはusers.show
という名前が付いており、URLが'/users/{user}'
、UserControllerのshowメソッドが実行される。
{user}
は動的パラメーターであり、今回の場合ユーザーIDに置き換わる。
route()での応用
さっきまではroute('post.show', ['post' => 1])
でidを指定して渡していた
Route::resource
を使ったらコントローラーではこう書ける
※ルートモデルバインディングを使ってる
public function show(User $user)
{
route('users.show', $user);
}
ルートモデルバインディングとEloquentモデルのURL生成機能を組み合わせることでLaravelが何やかんや自動的にやってくれるらしい
$user
をroute()の第二引数に渡すことでPKを紐づけてくれるよう