专栏首页鹿苑Laravel学习教程之request validation的编写

Laravel学习教程之request validation的编写

前言

本文主要给大家介绍了关于Laravel之request validation编写的相关内容,在用laravel写api时,当前端传进来的request是POST/PUT/PATH等method时,那需要做req/

/uest validation,尽管对于前后端分离程序,前端程序Angular/Vue已经做了validation,但是ajax传过来的json input,在后端也需要做validation。

那该如何优雅的编写request validation呢?laravel官方文档已经包含了这个feature: Form Request Validation

实现方法如下

这里可以写一个JsonRequest:

class JsonRequest extends IlluminateFoundationHttpFormRequest

{

public functi/

/on rules()

{

$method = $this->method();

assert(in_array($method, [static::METHOD_POST, static::METHOD_PUT, static::METHOD_PATCH], true));

$controller = $this->route()->getController();

$rules = $controller::RULES;

return ($rules[$this->method()] ?? []) + ($rules['*'] ?? []);

}

public function authorize()

{

return true;

}

}

这样就可以在众多Model Controller里使用JsonRequest就行,如:

use IlluminateHttpRequest;

final class AccountController extends AppHttpControllersControlle

{

public const RULES = [

Request::METHOD_POST => [

'bank_account' => 'required_if:type,bank',

'loan_account' => 'required_if:type,loan',

],

Request::METHOD_PUT => [

// ...

],

'*' => [

// ...

],

];

}

这样就可以校验前端传进来的json input是否合法。

(1)如果前端传进来的json input是:

{

"name": "lx1036",

"type": "loan",

"bank_account": {

"source": "bank",

}

}

那就validation失败,不合法。

(2) 如果前端传进来的json input是:

{

"name": "lx1036",

"type": "bank",

"loan_account": {

"source": "loan",

}

}

那就validation失败,不合法。

这样就可以校验json input,不合法就直接弹回throw 一个HttpException,不再用在进入下一步逻辑。对于这样嵌套的json input,使用request validation来校验对象间关系很重要,可以看做是进入核心业务逻辑前的初步校验。。当然最后写表时还有model validation,避免坏数据进入db。

最后一点,laravel文档只是说了用法,没有说明原理。代码在IlluminateFoundationProvidersFormRequestServiceProvider::class:

public function boot()

{

// IlluminateFoundationHttpFormRequest use 了 ValidatesWhenResolvedTrait,extends 了 IlluminateContractsValidationValidatesWhenResolved

$this->app->afterResolving(ValidatesWhenResolved::class, function ($resolved) {

$resolved->validate();

});

// ...

}

所以当从容器中resolve完IlluminateFoundationHttpFormRequest后就会立即执行IlluminateFoundationHttpFormRequest::validate()方法,具体不详述,可看laravel源码。

OK,总之,在写程序时,validation很重要,需要去写,包括request validation和model validation。。。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

原文链接:https://www.blog.17ti.com/php/4366.html

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Laravel学习教程之model validation的使用示例

    前言 本文主要给大家介绍了关于Laravel学习之model validatio使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。...

    用户2323866
  • 通过 Laravel 表单请求类实现字段验证和错误提示

    在上一篇教程中,我们已经演示了如何在控制器方法中对表单请求字段进行验证,并且提到如果请求字段很多很复杂,都写到控制器方法里面会导致控制器臃肿,从单一职责原则来说...

    学院君
  • Laravel 5.5 的自定义验证对象/类

    Laravel 5.5 将提供一个全新的自定义验证规则的对象,以作为原来的 Validator::extend 方法的替代。 Laravel 中的表单验证是比较...

    小李刀刀
  • Go 语言 Web 编程系列(一)—— 快速入门:创建第一个 Web 应用

    首先,我们基于 HTTP 编程中介绍的 net/http 包来实现一个简单的 HTTP 服务器作为 Web 服务器:

    学院君
  • Laravel框架表单验证格式化输出

    最近在公司的项目开发中使用到了 laravel 框架,采用的是前后端开发的模式。接触过前后端开发模式的小伙伴应该都知道,后端返回的数据格式需要尽可能搞得保证一致...

    A梦多啦A
  • laravel5.5功能尝鲜

    如果laravel 命令报错,请参考 http://blog.csdn.net/fishermanmax/article/details/51916898 如...

    lilugirl
  • 基于Container Event容器事件的Laravel WEB APP

    说明:本文主要讲述Laravel容器事件,并更根据容器事件做一个简单demo供加深理解容器事件。同时,作者会将开发过程中的一些截图和代码黏上去,提高阅读效率。

    botkenni
  • 3分钟短文:Laravel应用跟用户打交道,就从拿到他们的数据开始!

    本来讲完路由和控制器,应该接着讲一讲视图的,但是鉴于视图的功能实在太枯燥,况且是前端页面,免不了写一些js和css。而laravel是偏重后端的,所以为了给后端...

    程序员小助手
  • Laravel5.1 框架Middleware中间件基本用法实例分析

    本文实例讲述了Laravel5.1 框架Middleware中间件基本用法。分享给大家供大家参考,具体如下:

    砸漏
  • Laravel中批量赋值Mass-Assignment的真正含义详解

    前言 很多人初次遇到 批量赋值 的时候,很容易理解成 批量添加多条数据,实际并非如此。下面话不多说了,请看下面的例子。

    用户2323866
  • 在 Laravel 控制器中进行表单请求字段验证

    在 Web 应用中,用户提交的数据往往是不可预测的,因此一个非常常见的需求是对用户提交的表单请求进行验证,以确保用户输入的是我们所期望的数据格式。很多 Web ...

    学院君
  • Laravel学习笔记之bootstrap源码解析

    说明:Laravel在把Request通过管道Pipeline送入中间件Middleware和路由Router之前,还做了程序的启动Bootstrap工作,本文...

    用户7353560
  • 在 Laravel 项目中编写第一个 Vue 组件

    和 CSS 框架一样,Laravel 不强制你使用什么 JavaScript 客户端框架,但是开箱对 Vue.js 提供了良好的支持,如果你更熟悉 React ...

    学院君
  • 3分钟短文:十年窖藏,Laravel告诉你表单验证的“正确姿势”

    上一章我讲到了使用FormBuilder让后端开发者快速构建前端表单页面,而为了示例,

    程序员小助手
  • 深入剖析 Laravel 服务容器

    之前在 深度挖掘 Laravel 生命周期 一文中,我们有去探究 Laravel 究竟是如何接收 HTTP 请求,又是如何生成响应并最终呈现给用户的工作原理。

    柳公子
  • 3分钟短文 | Laravel 灵活地获取当前请求的路由地址

    Laravel程序上下文内,我们需要动态地获取当前的路由地址,应该怎么写呢?本文就通过从 Laravel 4 到 5 及以上版本的实现方法,带大家重温这一知识点...

    程序员小助手
  • laravel初次学习总结及一些细节

    刚开始一周多一点的时间先把laravel的开发文档看了一遍,,感觉刚开始接触时的感觉laravel的目录与thinkphp又不一样,它们的渲染模板的方式也不一样...

    lin_zone
  • 3分钟短文 | Laravel 内3种数据校验的写法,你喜欢哪一个?

    web应用程序公开访问几乎没有不带用户交互的,难免要接收用户输入的奇奇怪怪的东西。对于后端程序,必须对输入的内容进行有效性过滤。

    程序员小助手
  • Laravel5.1 框架控制器基础用法实例分析

    本文实例讲述了Laravel5.1 框架控制器基础用法。分享给大家供大家参考,具体如下:

    砸漏

扫码关注云+社区

领取腾讯云代金券