ルートパラメータで取得した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
になる)