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

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

作者头像
Petrochor
发布于 2022-06-07 07:48:01
发布于 2022-06-07 07:48:01
90700
代码可运行
举报
文章被收录于专栏:StephenStephen
运行总次数:0
代码可运行

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

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

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

代码语言:javascript
代码运行次数:0
运行
复制
    /**
     * 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
代码运行次数:0
运行
复制
php artisan make:request ApiRequest

2.在 ApiRequest 中重写 failedValidation

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

3.继承 ApiRequest

代码语言:javascript
代码运行次数:0
运行
复制
class RegisterRequest extends ApiRequest
{
    // 省略
}

4.结果:

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
Laravel 表单验证失败跳首页的解决办法
https://learnku.com/docs/laravel/9.x/validation/12219#quick-writing-the-validation-logic
崔哥
2023/04/01
2.5K0
[译]Laravel 5.0 之 表单验证类 (Form Requests)
本文译自 Matt Stauffer 的系列文章. ---- 让人头痛的表单验证 只要你曾经在使用 Laravel 框架的过程中试图找到有关用户输入验证的最佳实践, 你就应该了解这是一个争论最多并且几
小李刀刀
2018/03/02
4.2K0
【Laravel系统3.3】控制器与表单验证
在请求过程中,控制器往往是我们在做业务开发时绕不过的一环。从 MVC 理论的成熟到现代化的开发过程中,控制器一直扮演着重要的角色。可以说,我们可以不要前端(只做接口),可以不要模型(直接读取数据),但控制器却是必不可少的。当然,在正式的 MVC 模型中,视图是可以直接和模型交互的,由此,也引申出了 MVP 模型,其中的这个 P 就是强化控制器的作用,让模型和视图解耦。其实我们大部分正规的开发,都是基于这个 MVP 的,很少会直接让视图和模型去交互。
硬核项目经理
2023/03/03
9K0
【Laravel系统3.3】控制器与表单验证
Laravel Validation 表单验证(二、验证表单请求)
创建表单请求验证 面对更复杂的验证情境中,你可以创建一个「表单请求」来处理更为复杂的逻辑。表单请求是包含验证逻辑的自定义请求类。可使用 Artisan 命令 make:request 来创建表单请求类:
joshua317
2022/10/31
30.3K0
[laravel] laravel验证请求参数
laravel 验证请求参数,有自带的规则,如果有特殊的规则,可以自己写正则验证逻辑
唯一Chat
2021/09/23
4.2K1
[laravel] laravel验证请求参数
Laravel框架表单验证格式化输出
最近在公司的项目开发中使用到了 laravel 框架,采用的是前后端开发的模式。接触过前后端开发模式的小伙伴应该都知道,后端返回的数据格式需要尽可能搞得保证一致性,这样前端在处理时也方便处理。我们先通过观看下面的两张接口返回的效果图吧,这样或许会更加的直观一些
兔云小新LM
2019/09/25
2.2K0
Laravel框架表单验证格式化输出
记录Laravel 定义API 统一返回JSON响应和错误格式
最近在用 Laravel 写 API 接口,记录一下统一返回JSON响应 和 返回的错误格式
Alone88
2019/10/22
4.3K0
完善你的Laravel异常处理
异常处理是编程中十分重要但也最容易被人忽视的语言特性,它为开发者提供了处理程序运行时错误的机制,对于程序设计来说正确的异常处理能够防止泄露程序自身细节给用户,给开发者提供完整的错误回溯堆栈,同时也能提高程序的健壮性。
KevinYan
2019/10/13
3K0
Laravel 5.0 发布, 海量新特性!!
译注: 期待 Laravel 5.0 已经很久很久了, 之前跳票说要到今年一月份发布. 从一月份就一直在刷新官网和博客, 始终没有更新的消息, 前几天终于看到官网文档切换到了 5.0 版. 新版本带来了众多令人激动的新特性, 尤其是定时任务队列和表单请求两个特性, 光看一下更新说明中的简单介绍都忍不住要上手尝试了. 今天总算抽出一点时间把官方的新特性说明文档简单地翻译了一下, 希望所有喜欢 Laravel 框架的朋友都能感受到这个版本带来的激动人心的改变. 当然, 如果你需要的是 Phalcon 那样的性能
小李刀刀
2018/03/02
4.5K0
通过 Laravel 表单请求类实现字段验证和错误提示
在上一篇教程中,我们已经演示了如何在控制器方法中对表单请求字段进行验证,并且提到如果请求字段很多很复杂,都写到控制器方法里面会导致控制器臃肿,从单一职责原则来说需要将表单请求验证拆分出去,然后通过类型提示的方式注入到控制器方法。今天,我们就来实现这个拆分,Laravel 提供了表单请求类的功能帮助我们快速完成这一架构调整。
学院君
2021/01/08
4.4K0
在 Laravel 控制器中进行表单请求字段验证
在 Web 应用中,用户提交的数据往往是不可预测的,因此一个非常常见的需求是对用户提交的表单请求进行验证,以确保用户输入的是我们所期望的数据格式。很多 Web 框架都对此功能专门提供了工具集,Laravel 也不例外,而且这个工具集异常丰富,基本上涵盖了目前主流的所有验证规则,即使是一些非常个性化的验证,也可以基于 Laravel 验证类的扩展功能来自定义验证规则,非常强大。接下来,我们就一起来看看如何在 Laravel 中对表单请求进行验证。
学院君
2021/01/08
6.5K0
Laravel 参数验证的疑与惑
Laravel 文档调用验证器,除了通过控制器,还有就是通过Facades的方式创建验证器对象。Validator::make($data,$rule,$message)。
写PHP的老王
2019/11/28
3.7K0
记录hyperf框架表单验证中自定义验证规则和格式化输出
本文对使用hyperf框架的表单验证中遇到的两个小细节做一个分享。具体的两点如下:
兔云小新LM
2021/07/01
2.6K0
记录hyperf框架表单验证中自定义验证规则和格式化输出
Laravel 多态关系的表单验证
相信大家使用 Laravel 开发应用的时候都会有评论模块吧,而且我们通常将该模块设计为多态关系(如果你对这个关系还不明白的话,请赶紧打开 Laravel 文档数据库关系章节复习一遍吧!)。 先看看我们的数据库结构: id commentable_id commentable_type body 那么遇到一个问题,如果写入数据呢?一般来讲有两种方式,而我们通常用的一种是从父模型使用关系写入,比如我们有一个 App\Thread 类,它里面对评论的关系是这样的: class Thread {    pu
overtrue
2018/07/05
2.5K0
Laravel 表单 size 验证数字
我以为只要在验证的数据 9 是整数,他就会直接按数字的方式验证,结果直接打印了错误消息The age must be 9 characters.这个错误消息很明显的是提示字符串长度的, 然后看了一下才发现还需要加上一个条件。numeric或者integer,
seth-shi
2023/12/18
3820
Laravel 表单 size 验证数字
带你学习hyperf-3.7 验证器
3.7 验证器 与laravel的表单验证基本相同 1. 安装composer类库 composer require hyperf/validation Bash Copy 2. 设置表单验证
美团骑手
2021/12/24
1.2K0
Laravel 5.5 的自定义验证对象/类
Laravel 5.5 将提供一个全新的自定义验证规则的对象,以作为原来的 Validator::extend 方法的替代。 Laravel 中的表单验证是比较方便的,而且内置了大量的可用验证规则,但不管官方提供了多少,总还是会有满足不了需求的时候。很多时候我们会直接用正则表达式来处理这种特殊的验证,也有时候我们会选择用 Validator::extend 来扩展一个自定义的规则。但在 Laravel 5.5 版本中,我们有了新的手段,只要定义一个实现 Illuminate\Contracts\Valida
小李刀刀
2018/03/02
3.3K0
Laravel 底层原理:门面(Facades)
Laravel 内置了很多 Facades ,可以访问绝大部分 Laravel 的功能。
码农编程进阶笔记
2021/07/20
1.2K0
相关推荐
Laravel 表单验证失败跳首页的解决办法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档