2017-04-20 54 views
0

在Laravel执行路由参数验证以确保id(GET)是数字的正确方法是什么?我目前在做数字路由验证?

这样:

public function run($id, Request $request) 
{ 
    if (!is_numeric($id)) { 
     return response()->json([ 
      'success' => false, 
      'message'  => 'ID must be numeric' 
     ]); 
    } 

    // Do something else 
} 

回答

3

做在你自己的路线,使用regular expression constraint

Route::get('user/{id}', function ($id) { 
    // 
})->where('id', '[0-9]+'); 

->where('id', '[0-9]+')将导致只路线是有效的id数值。访问user/foo将导致404

+0

哇,我从来不知道我可以使用'where'的路线。 –

+2

@ I'll-Be-Back是的,你可以。或者,您可以使用路由模型绑定,如果找不到具有id的模型,则会生成404。让您不必手动生成错误。 – ceejayoz

+0

@AkshayKhale呃,好吗?该链接已经在我的答案中。 – ceejayoz

2

在你的路由定义,你可以添加一个正则表达式的路由参数

Route::get('run/{id}', '[email protected]')->where('id', '[0-9]+');