ルートの特定のパラメーターのみを受け入れたい場合は、次のようにします。
Route::get('users/{id}', 'UsersController@show')->where('id', '\d+');
しかし、次のようなものが必要な場合はどうすればよいでしょうか:
Route::get('users/{id}', 'UsersController@show')->where('id', '\d+')->where(this id exists in table column id);
laravelでこれはどのように可能ですか?
IDがまだデータベースに存在しない場合、ページが見つかりませんでした。
アップデート
フィルターを作成するというアイデアがありました:
Route::filter('user.exists', function()
{
//get the id then check the database
});
しかし、どうすれば $id をフィルターに渡すことができるでしょうか?
ノート
クエリがコントローラーにデータを返したかどうかを確認し、次のようになった場合は 404 をスローするようなことができることを知っています。
$user = User::find($id);
if(!$user){
App::abort(404);
}
でもルート自体でこれができればもっとすっきりすると思います。ユーザーだけでなく、さらにフィルタリングする必要があるためです。