【问题标题】:How to get validation message in laravel 5.5如何在 laravel 5.5 中获取验证消息
【发布时间】:2018-03-11 06:05:12
【问题描述】:

大家好,我正在使用 Laravel 5.5,在这里我需要为我的 API 显示验证消息,直到现在我已经这样做了

$validator = Validator::make($request->all(),[
            'first_name' => 'email|required',
            'last_name' => 'nullable',
            'email' => 'email|required',
            'mobile_no' => 'nullable|regex:/^[0-9]+$/',
            'password' => 'required',
        ]);
        if($validator->fails)
        {
            $this->setMeta('status', AppConstant::STATUS_FAIL);
            $this->setMeta('message', $validator->messages()->first());
            return response()->json($this->setResponse(), AppConstant::UNPROCESSABLE_REQUEST);
        }

由于 Laravel 5.5 有一些很棒的验证功能,我希望像这样验证我的请求

request()->validate([
            'first_name' => 'email|required',
            'last_name' => 'nullable',
            'email' => 'email|required',
            'mobile_no' => 'nullable|regex:/^[0-9]+$/',
            'password' => 'required',
        ]);

但是我在这里遇到了问题,我应该怎么做才能检查验证是否失败?就像我在 if($validator->fails) 所做的那样

【问题讨论】:

  • 检查documentation,它在以下部分中有说明:显示验证错误AJAX请求和验证!!
  • 我不想在视图中显示它们我需要将其发送回移动设备转换为json()
  • AJAX 请求和验证 部分中说:Laravel generates a JSON response containing all of the validation errors. This JSON response will be sent with a 422 HTTP status code
  • 如果你想要你的验证信息,你可以使用这个 return Response::json(array('success' => 0, 'msg'=> $validation->getMessageBag()->first( )),200);
  • @Maraboc 这是否适用于邮递员请求?或根据 API 请求,我正在研究 API 而不是 AJAX 兄弟

标签: php laravel validation laravel-validation laravel-5.5


【解决方案1】:

Laravel 5.5 中,就像提到的 documentation 一样,验证过程非常简单:

  • 显示验证错误:

那么,如果传入的请求参数没有通过给定的 验证规则?如前所述,Laravel 会自动 将用户重定向回他们之前的位置。此外,所有 验证错误会自动闪现到会话中。

再次注意,我们不必显式绑定错误 在我们的 GET 路由中向视图发送消息。这是因为 Laravel 会 检查会话数据中的错误,并自动将它们绑定到 视图(如果可用)。

  • AJAX 请求和验证:

在本例中,我们使用传统形式将数据发送到 应用。但是,许多应用程序使用 AJAX 请求。使用时 AJAX 请求期间的 validate 方法,Laravel 不会生成 重定向响应。相反,Laravel 会生成一个 JSON 响应 包含所有验证错误。这个 JSON 响应将是 使用 422 HTTP 状态码发送。

正如你所说:这意味着你不需要把你的 ifs 来处理验证 laravel 会很好地照顾它们 :)

【讨论】:

    【解决方案2】:

    这是我使用的一些语法

    public static $user_rule = array(
    'user_id'     => 'required',
    'token' => 'required',
        );
    
    
    
    public static function user($data)  
     {  
        try{
              $rules = User::$user_rule;
              $validation = validator::make($data,$rules);
              if($validation->passes())
              {
    
    
              }
              else
              {
                  return Response::json(array('success' => 0, 'msg'=> $validation->getMessageBag()->first()),200);
              }
              return 1;
            }
        catch(\Illuminate\Databas\QueryException $e) {
                return Response::json(array('success' => 0, 'msg' => $e->getMessage()),200);
            }
     }
    

    希望对您有所帮助!

    【讨论】:

      【解决方案3】:

      请在标题中添加 Accept: application/json

      Laravel 自动发送带有响应代码的错误消息。

      【讨论】:

        【解决方案4】:

        根据 2019 Laravel 5.8,它就像这样简单:

        // create the validator and make a validation here...
        if ($validator->fails()) {
            $fieldsWithErrorMessagesArray = $validator->messages()->get('*');
        }
        

        您将获得包含字段名称和错误消息的数组。

        【讨论】:

          【解决方案5】:

          您可以显示第一个错误。

          if ($validator->fails()) {
             $error = $validator->errors()->first();
          }
          

          对于所有错误:

          $validator->errors()
          

          【讨论】:

            猜你喜欢
            • 2018-12-17
            • 2016-05-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-09-03
            • 2018-07-01
            • 1970-01-01
            相关资源
            最近更新 更多