如何在 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 一样,验证过程非常简单:
显示验证错误:AJAX 请求和验证:那么,如果传入的请求参数没有通过给定的 验证规则?如前所述,Laravel 会自动 将用户重定向回他们之前的位置。此外,所有 验证错误会自动闪现到会话中。
再次注意,我们不必显式绑定错误 在我们的 GET 路由中向视图发送消息。这是因为 Laravel 会 检查会话数据中的错误,并自动将它们绑定到 视图(如果可用)。
在本例中,我们使用传统形式将数据发送到 应用。但是,许多应用程序使用 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 FormRequest 自定义错误消息