拉拉维尔 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。验证请求重定向/响应的主要内容,如果未能解决你的问题,请参考以下文章

使用参数流明重定向

在 axios 发布请求后使用 express 进行重定向

重定向和转发的区别

Laravel 5.5 - 升级身份验证后没有正确重定向

身份验证重定向失败

java重定向问题