Laravel 5.5。验证请求重定向/响应

时间:2017-12-15 09:44:41

标签: php ajax laravel validation

我可以覆盖验证请求中的某些属性来控制验证失败时会发生什么吗? (我不想在控制器中使用验证)

我有用户验证请求:

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
    ]]);
}

2 个答案:

答案 0 :(得分:1)

要返回验证错误消息

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

的形式访问错误

答案 1 :(得分:0)

更新:

public function postRegisterAjax(UserRegistrationValidationRequest $request)
{
        $validator = Validator::make($data, $rules);
        if ($validator->fails()) {
            $msg = $validator->errors();
            return $this->responseJson($status, $msg);
        }
}