拉拉维尔 5.5。验证请求重定向/响应
Posted
技术标签:
【中文标题】拉拉维尔 5.5。验证请求重定向/响应【英文标题】:Laravel 5.5. validation request redirect/response 【发布时间】:2018-05-29 12:02:22 【问题描述】:我能否覆盖验证请求中的某些属性来控制验证失败时会发生什么? (我不想在控制器中使用验证)
我有用户验证请求:
public function rules()
return [
'email' => 'required|email|max:255|unique:user',
'name' => 'required',
'password' => 'required|min:6',
'password_confirmation' => 'required|min:6|same:password'
];
当 AJAX 调用注册方法时,会发生这种情况:
public function postRegisterAjax(UserRegistrationValidationRequest $request)
...
return $this->responseJson($status, $msg);
我需要以某种方式更新$msg
,以便我可以通过JS动态返回验证错误消息。
编辑:我的最终解决方案(在我的自定义表单请求中)
public function failedValidation(Validator $validator)
if ($validator->fails())
$status = Status::ERROR;
throw new HttpResponseException(response()->json(["response" => [
'msg' => $validator->errors()->all(':message'),
'status' => $status
]]));
return response()->json(["response" => [
'msg' => 'User successfully registered',
'status' => Status::SUCCESS
]]);
【问题讨论】:
【参考方案1】:更新:
public function postRegisterAjax(UserRegistrationValidationRequest $request)
$validator = Validator::make($data, $rules);
if ($validator->fails())
$msg = $validator->errors();
return $this->responseJson($status, $msg);
【讨论】:
那不是我的问题。消息永远不会被馈送到 ajax,因为在我能够返回 json 响应之前验证失败 你从哪里得到 $data 和 $rules?你的意思是 $request->all() 和 $this->rules() 是的,这是行不通的,因为验证器在你输入函数之前就失败了【参考方案2】:返回验证错误信息:
在Laravel表单请求验证中,如果验证失败,在AJAX请求的情况下,会返回一个JSON响应。 JSON 响应包含所有验证错误。您可以在 ajax
错误响应中访问它们。
(转储您的错误响应,您可以在responseJSON
中看到它们。
如果您想添加额外的逻辑/验证并将错误附加到您的error bag
,您可以使用after-validation-hook。
希望对你有所帮助..
更新
你可以像下面这样覆盖laravel form request
的响应方法,
public function response(array $errors)
return response()->json(['status' => $status, "response" => $errors]);
在您的回复中,您将能够以data.response
访问错误
【讨论】:
是否可以修改,而不是responseJSON
我得到 response
属性?
如果我理解你的正确,你可以访问你想要的response
作为response.responeJSON
。
我可以使用data.responseJSON
访问它(与您编写的内容相同,具体取决于您在函数参数中传递的内容),但我想要data.response
。我的意思是是否可以将responseJSON
改为称为response
?
答案已更新。希望这是你想要的。相关:***.com/questions/35097371/… 和 ***.com/questions/30544779/…
正是我需要的! failedValidation()
代替 Laravel 5.5 中的 response()
以上是关于拉拉维尔 5.5。验证请求重定向/响应的主要内容,如果未能解决你的问题,请参考以下文章