【问题标题】:Validation error messages as JSON in Laravel 5.3 RESTLaravel 5.3 REST 中的 JSON 验证错误消息
【发布时间】:2017-03-09 18:10:34
【问题描述】:

我的应用正在通过 API 端点中的 POST 请求创建一个新条目。

现在,如果任何验证失败,那么 laravel 5.3 不会返回错误 json,而是将请求重定向到主页。

这是我的控制器:

public function create( Request $request )
{
    $organization = new Organization;

    // Validate user input
    $this->validate($request, [
        'organizationName' => 'required',
        'organizationType' => 'required',
        'companyStreet' => 'required'
    ]);

    // Add data 
    $organization->organizationName = $request->input('organizationName');
    $organization->organizationType = $request->input('organizationType');
    $organization->companyStreet = $request->input('companyStreet');
    $organization->save();
    return response()->json($organization);
}

如果验证没有问题,则实体将成功添加到数据库中,但如果验证请求有问题,则不会将所有错误消息作为 json 响应发送,而是重定向回主页。

我如何将验证返回类型设置为 json,因此如果验证失败,则每次请求时 laravel 都会默认将所有错误消息作为 json 发送。

【问题讨论】:

    标签: rest laravel laravel-5 laravel-5.3


    【解决方案1】:

    您可以按照以下方式进行验证:

        $validator = \Validator::make($request->all(), [
           'organizationName' => 'required',
           'organizationType' => 'required',
           'companyStreet' => 'required'
        ]);
    
        if ($validator->fails()) {
           return response()->json($validator->errors(), 422)
        }
    

    【讨论】:

      【解决方案2】:

      问题中使用的验证看起来符合 laravel 的建议。重定向的原因是它抛出了一个异常,您可以使用下面的代码轻松捕获该异常。所以最好使用推荐的代码方式,而不是重新编写框架的代码:)

      public function create( Request $request )
      {
          $organization = new Organization;
      
          // Validate user input
          try {
              $this->validate($request, [
                  'organizationName' => 'required',
                  'organizationType' => 'required',
                  'companyStreet' => 'required'
              ]);
          } catch (ValidationException $e) {
              return response()->json($e->validator->errors(), 422);
          }
      
          // Add data 
          $organization->organizationName = $request->input('organizationName');
          $organization->organizationType = $request->input('organizationType');
          $organization->companyStreet = $request->input('companyStreet');
          $organization->save();
          return response()->json($organization, 201);
      }
      

      【讨论】:

      • 我会努力的!谢谢\
      • @rakibtg 不客气,如果满足要求记得采纳答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 2020-01-23
      • 2016-05-27
      • 2021-12-19
      • 2021-02-24
      • 2020-02-26
      • 2017-01-06
      相关资源
      最近更新 更多