如何在 laravel 5.5 中获取验证消息

Posted

技术标签:

【中文标题】如何在 laravel 5.5 中获取验证消息【英文标题】:How to get validation message in 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 兄弟 【参考方案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()

【讨论】:

以上是关于如何在 laravel 5.5 中获取验证消息的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 5.5 中为选定的请求类设置自定义响应

如何在 Vue 2 和 Laravel 5.5 中验证会话和身份验证令牌

如何在 laravel 5.5 中获取网络路由列表?

Laravel 5.5 FormRequest 自定义错误消息

如何使用 Laravel 5.5 身份验证使电子邮件登录不区分大小写

如何在laravel 5.5中使用令牌从JWTAuth获取用户