[英]laravel validator for rest api
我正在尝试遵循 CRUD 上 REST api 的最佳实践。
GET: users/ -> all
GET: users/:id -> one specific user.
POST: users/ -> add one
PUT: users/:id -> update specific user.
DELETE: users/:id -> delete one user.
在 laravel 8 我想验证 url :id
使用验证器,所以我在删除用户时有这样的:
$validator = Validator::make(['id' => $request->id], [
'id' => 'exists:users,id,deleted_at,NULL',
]);
这种更新用户的方式:
$validator = Validator::make(array_merge($request->all(), ['id' => $request->id]), [
'id' => 'required|exists:users,id,deleted_at,NULL',
'name' => 'required',
'surname' => 'required',
'email' => 'required|email:rfc,dns'
]);
如您所见,我必须将id
放在数组上和/或与$request->all()
合并。 laravel 中有什么方法可以对请求执行此操作吗?
我通过 Laravel 找到了 3 种方法:
$request->add(['variable' => 'value']);
$request->merge(["key"=>"value"]);
$request->request->set(key, value);
但是,在使用 controller 方法之前向请求添加路由参数的解决方案会更好。
您可以在验证之前即时更新请求 object 并添加 ID 字段,例如
$request['id'] = $id;
// note: the $id is your function's parameter name
$validator = Validator::make(array_merge($request->all()), [
'id' => 'required|exists:users,id,deleted_at,NULL',
'name' => 'required',
'surname' => 'required',
'email' => 'required|email:rfc,dns'
]);
您可以像您正在做的那样做,但使用路由 model 绑定将是 go 的方式。
现在,当您想通过向/users/:id
发送PUT
来更新用户时,并且该用户不存在,您将获得422
。 但是您真正想要的是404
。
通过路由 model 绑定,Laravel 将检查 model 是否存在,如果不存在则使用404
中止。
如果路由 model 绑定不是一个选项,您也可以不使用验证器验证 id 并使用User::findOrFail($request->input('id'))
检索用户,然后框架仍将中止404
如果找不到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.