【问题标题】:laravel validator for rest api用于 rest api 的 laravel 验证器
【发布时间】:2021-12-07 20:14:43
【问题描述】:

我正在尝试在 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);

但是在点击控制器方法之前向请求添加路由参数的解决方案会更好。

【问题讨论】:

    标签: php laravel laravel-8


    【解决方案1】:

    您可以在验证之前即时更新请求对象并添加 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'
    ]);
    

    【讨论】:

      【解决方案2】:

      您可以按照自己的方式进行操作,但使用 route model binding 进行操作将是可行的方法。

      现在,如果您想通过向/users/:id 发送PUT 来更新用户,而该用户不存在,您将获得422。但你真正想要的是404

      使用路由模型绑定,Laravel 会检查模型是否存在,如果不存在则使用 404 中止。

      如果路由模型绑定不是一个选项,您也可以不使用验证器验证 id 并使用 User::findOrFail($request->input('id')) 检索用户,如果找不到,框架仍将使用 404 中止.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-24
        • 2017-01-29
        • 2014-06-03
        • 1970-01-01
        • 2021-05-30
        • 2011-04-28
        • 2013-01-05
        • 2017-03-12
        相关资源
        最近更新 更多