前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel Api表单验证失败被重定向到主页

Laravel Api表单验证失败被重定向到主页

作者头像
Petrochor
发布2022-06-07 15:48:01
5800
发布2022-06-07 15:48:01
举报
文章被收录于专栏:StephenStephen

Laravel Api 开发中,需要实现表单验证,但发现了一个问题,在 Laravel 中,api开发实现表单验证,如果验证失败,会被302重定向到主页。

如图,我们在请求 /passport/_register 时,状态码变成了302,而后重新请求了 127.0.0.1,这显然不是我们所要的结果,我们需要在表单验证失败时,抛出异常,响应错误信息给前端。

首先,定位到父类源码 Illuminate\Foundation\Http\FormRequest,以寻求解决方案,在 FormRequest 类中,有一个方法 failedValidation

代码语言:javascript
复制
    /**
     * Handle a failed validation attempt.
     *
     * @param  \Illuminate\Contracts\Validation\Validator  $validator
     * @return void
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    protected function failedValidation(Validator $validator)
    {
        throw (new ValidationException($validator))
                    ->errorBag($this->errorBag)
                    ->redirectTo($this->getRedirectUrl());
    }

    /**
     * Get the URL to redirect to on a validation error.
     *
     * @return string
     */
    protected function getRedirectUrl()
    {
        $url = $this->redirector->getUrlGenerator();

        if ($this->redirect) {
            return $url->to($this->redirect);
        } elseif ($this->redirectRoute) {
            return $url->route($this->redirectRoute);
        } elseif ($this->redirectAction) {
            return $url->action($this->redirectAction);
        }

        return $url->previous();
    }

这个方法显然是处理验证失败的,后面被重定向了,解决方法,我们可以重写 failedValidation 方法。

1.新建 ApiRequest.php

代码语言:javascript
复制
php artisan make:request ApiRequest

2.在 ApiRequest 中重写 failedValidation

代码语言:javascript
复制
    protected function failedValidation(Validator $validator)
    {
        throw new HttpResponseException(response()->json([
            'error' => (new ValidationException($validator))->errors()
        ], JsonResponse::HTTP_UNPROCESSABLE_ENTITY));
    }

3.继承 ApiRequest

代码语言:javascript
复制
class RegisterRequest extends ApiRequest
{
    // 省略
}

4.结果:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档