繁体   English   中英

rest api 的 laravel 验证器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM