LoginSignup
51
35

More than 3 years have passed since last update.

LaravelのMiddlewareでルートパラメータを取得

Last updated at Posted at 2017-04-24

ルートパラメータで取得したIDがマスタに存在しない場合はエラーで落としたい。
そんなときのメモ。

例えば以下のようなルーティングを設定していた場合、

Route::get('/example/{masterId}', 'ExampleController@index')->middleware('hoge');

ミドルウェア内で以下のように記述すれば、ルートパラメータが取得できる。

$masterId = $request->route()->parameter('masterId');

あとは存在をチェックして404で落とすなり、前の画面に戻すなりすれば良い。

// Hoge という Eloquent がある想定
abort_unless(Hoge::where('id', $masterId)->exists(), 404);

// 以下でも同じ
if (! Hoge::where('id', $masterId)->exists()) {
    abort(404);
}

取得したモデルをそのままviewで使いたい場合、view()ヘルパのshareメソッドが使える。

abort_unless($hoge = Hoge::find($masterId), 404);

view()->share('hoge', $hoge);

なお、単にフォーマットだけチェックできれば良いってことであれば、
ルーティング設定時に正規表現で制御できる。

Route::get('/example/{masterId}', 'ExampleController@index')->where(['masterId' => '[0-9]+']);

上記の場合masterIdが1文字以上の数値の場合のみこのルートに該当する。
(他に概要するルートがあればそれが実行され、無ければ404になる)

51
35
0

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
51
35