LoginSignup
11

More than 5 years have passed since last update.

Laravel 5.5 FormRequestの中でModel BindingされたEloquentインスタンスを取得する方法

Last updated at Posted at 2018-03-01

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条件もこちらから取ると分かりやすくてよいです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11