概要
ルートパラメーターは、idなどの値を指定するほか、モデルのインスタンスを直接渡してコントローラーで受け取ることができる。
値を渡して値を受け取る
ルーティング
以下の様にルーティングを設定したとする。
1 2 |
Requeset::get('/users/{id}', 'UserController@show') ->name('users.show'); |
ルーティングは以下のようになる。
1 2 3 4 5 6 7 8 |
$ php artisan route:list +--------+----------+------------+------------+------------------------------------------+------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+----------+------------+------------+------------------------------------------+------------+ ........ | | GET|HEAD | users/{id} | users.show | App\Http\Controllers\UserController@show | web | ........ +--------+----------+------------+------------+------------------------------------------+------------+ |
ビューでの渡し方
ビューからのルーティングでidなどの値を渡すなら、以下のようにURLで展開させるかroute()
ヘルパーの第2引数で指定する。
1 2 3 4 5 |
<!-- URLで値を展開させる --> <a href="/users/{{ $id }}">プロフィール</a> <!-- route()ヘルパーの第2引数に渡す --> <a href="{{ route('users.show', $id) }}">プロフィール</a> |
いずれの場合も、以下のようなURLでGETリクエストされる。
1 |
http://localhost/users/2 ←idの値 |
ログイン済みユーザーのidを渡す場合、以下のように書ける。
1 2 3 4 5 |
<!-- URLで値を展開させる --> <a href="/user/{{ \Auth::user()->id }}">プロフィール</a> <!-- route()ヘルパーの第2引数に渡す --> <a href="{{ route('user.show', \Auth::user()->id) }}">プロフィール</a> |
コントローラーでの受け取り方
コントローラー側でパラメーターを受け取る場合、アクションメソッドの引数にパラメーターが渡されるので、それをそのまま利用すればよい。
1 2 3 4 5 6 7 8 9 |
class UserController extends Controller { public function getProfile($id) { return 'user name:" . \App\User::find($id)->name; } } // ブラウザー表示例 // user name:user2 |
モデルのインスタンスのまま渡して受け取る
ルーティング
以下の様にルーティングを設定する。
1 2 |
Requeset::get('/users/{user}', 'UserController@show') ->name('user.show'); |
リソースルーティングで指定するなら以下のとおり。
1 2 |
Route::resource('users', 'UserController') ->only(['show']); |
何れの場合もルーティングは以下のようになる。
1 2 3 4 5 6 7 8 |
$ php artisan route:list +--------+----------+--------------+------------+------------------------------------------+------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+----------+--------------+------------+------------------------------------------+------------+ ........ | | GET|HEAD | users/{user} | users.show | App\Http\Controllers\UserController@show | web | ........ +--------+----------+--------------+------------+------------------------------------------+------------+ |
ビューでの渡し方
ビューからからのルーティングでモデルのインスタンスを渡す場合も、URLで展開させるかroute()
ヘルパーの第2引数で指定する。ここでは認証済みのユーザーインスタンスを渡している。
1 2 3 4 5 |
<!-- URLで値を展開させる --> <a href="/users/{{ \Auth::user() }}">プロフィール</a> <!-- route()ヘルパーの第2引数に渡す --> <a href="{{ route('users.show', \Auth::user()) }}">プロフィール</a> |
インスタンスを渡しても、ルートパラメーターはidの値になる。
1 |
http://localhost/users/2 |
コントローラーでの受け取り方
コントローラーのアクションでは、引数にモデルクラスのメソッドインジェクションを適用して、idに対応したインスタンスを受け取る。
1 2 3 4 5 6 7 8 9 |
class UserController extends Controller { public function getProfile(\App\User $user) { return 'user name:" . $user->name; } } // ブラウザー表示例 // user name:user2 |
コントローラーの冒頭でモデルをuse
指定してもよい。
1 2 3 4 5 6 7 8 9 10 11 12 |
use App\User; // user \App\Userでもよい class UserController extends Controller { public function getProfile(User $user) { return 'user name:" . $user->name; } } // ブラウザー表示例 // user name:user2 |