我的Laravel 4.2项目的验证是使用Ardent包完成的。在去Laravel 5.5后,我已经取消了Ardent,并希望通过表单请求进行Laravel的本机验证。
我遇到的问题是之前验证了Ajax调用:
public function postRegisterAjax(A)
{
try {
...
} catch (ExceptionBag $e) {
$msg = $e->getMessageBag()->all(':message');
$status = Status::ERROR;
}
return $this->responseJson($status, $msg);
}
现在我介绍了UserValidationRequest
类,我希望Ajax调用给我一个错误消息而不需要重新加载页面。为了做到这一点,我需要将状态和消息转发为Json响应。
我以某种方式试图在验证钩子之后做到这一点,但它不起作用:
protected function getValidatorInstance()
{
$validator = parent::getValidatorInstance();
if ($validator->fails()) {
\Log::info($validator->errors());
$msg = $validator->errors();
$status = Status::ERROR;
return response()->json(['response' => [
'status' => $status,
'msg' => $msg,
]]);
}
return $validator;
}
代码在return response()
上失败,说Method passes does not exist
(Illuminate/Support/Traits/Macroable.php:96
)。
有谁知道这似乎是什么问题?
答案 0 :(得分:0)
从Laravel 5.x版本(不确定),failedValidation()
方法是在表单请求中引入的,而不是Laravel 4.x作为response()
的方法。
我通过在表单请求中覆盖该方法来定制对我的需求的响应来解决我的问题:
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
]]);
}