Model Bindingとは
以下コードの {user}
部分のこと。
routes/web.php
Route::get('api/users/{user}', 'UserController@index');
/api/users/1
といったURIにアクセスし、コントローラのアクションでタイプヒンティングしつつ同じ変数名を指定しておくと、IDが1番のUserインスタンスを取得してくれる。
UserController
class UserController extends Controller
{
// api/users/1 にアクセスするとIDが1番のUserインスタンスが取れる
public function index (User $user)
{
dd($user);
}
}
FormRequestから呼び出す方法
Routeインスタンスのparameterメソッドから取ります。
parameterに指定するキーはrouterで定義した名前と同じになります。
UserRequest
class UserRequest extends Request
{
public function rules()
{
$user = $this->route()->parameter('user');
dd($user);
}
}
これが使えるとなにが嬉しいのか
既存データの状態を見てバリデーションルールを変える、といった挙動が綺麗に記述できるようになります。
edit時のunique条件もこちらから取ると分かりやすくてよいです。