0

ルートの特定のパラメーターのみを受け入れたい場合は、次のようにします。

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);
}

でもルート自体でこれができればもっとすっきりすると思います。ユーザーだけでなく、さらにフィルタリングする必要があるためです。

4

1 に答える 1

1

これはあなたが始めるのに役立つはずです:

Route::get('users/{id}', 'UsersController@show', array('before' => 'userExists'))->where('id', '[\d]+');

Route::filter('userExists', function($id) {
  echo $id; exit;
});
于 2013-05-31T19:20:38.783 に答える