对于后端开发而言,前端request请求中的参数校验是一个必不可少的环节。无论传来的参数是id还是email还是其他的参数,我们都要对参数的类型、大小、格式等等做这样或者那样的校验,然后才进行逻辑处理,以确保逻辑处理时万无一失,不会出现异样。于是乎,在controller层中就会出现一大坨的校验代码,这些校验代码甚至有时候都超过了正常的逻辑代码的数量,对于程序的扩展和维护很不利的。

但是,laravel为我们提供了一个很好的服务去解决参数校验这个问题,它就是----Validate。

首先,我们需要建一个路由,暂时就叫"test"吧,然后test对应着TestController中的test方法。

Route::get('test', 'TestController@test');class TestController extends Controller{ public function test(Request $request) { }}

假设请求的参数中需要id、title这两个参数,并且id必须是数字,且长度是1到10,并且是DB中的一行数据的主键、title必须是字符串,id和title都不能为空。一般的框架在写的时候就会先取到id和title,然后对取到的id和title进行“是否是空”、“是否长度在1到10之间”、“通过id能否在数据库中找到数据”等等繁琐的校验,利用laravel的“Validate”你只需要这样就可以了。

public function test(Request $request){ $validate = Validator::make($request->all(), [ 'id' => 'required|integer|between:1,10', 'title' => 'required|string' ]);

如果没有错误,就会继续往下进行逻辑处理。假如说校验不通过,例如id不在1和10之间,可以通过“validate”实例中的“errors()”方法,得到所有的错误,然后将错误放回给客户端,如果想返回错误队列中的头一个错误,就写$validate->errors()->first(),如果想返回所有错误列表,就写“$validate->errors()->all()”。如下:

if($validate->fails()){ return $validate->errors()->first();}

或者返回

if($validate->fails()){ return $validate->errors()->all();}

假如请求参数中的id不是一个数字,而是字符串,结果就会出现:

你可能会想:返回结果能否使中文?答案当然是可以,你可以针对自己的程序,换成你任何想要的语言:

在项目中找到“resources”目录下的“lang” 中的 “en”文件夹中的“validation.php”文件,

打开,然后找到这一行:

'integer' => 'The :attribute must be an integer.',

这句话除了“:attribute”是不是其他字和返回结果一模一样?或许你已经猜到了:这就是你调用的‘integer'方法的返回结果,“:attribute”是个变量,是你传的“id”!现在,你可以写成任何语言,我把它改为中文:

'integer' => ':attribute 必须是数字!'

然后我们再看返回结果:

完美!只要你利用Validator的make方法,在请求参数数组中对应上‘integer'、“required”等字符串就可以利用laravel提供的服务,对请求参数进行“数字”、“判空”等校验,laravel提供的众多校验方法,可以在laravel官网查询。(ps:或者直接查询validation.php这个文件!)

你或许还会想:我现在校验了id是否为空,id是否是数字,我还想校验id对应的数据能否在数据库中查得到!这能实现吗?

答案是:完全可以!在上篇文章中我介绍了laravel核心是一个IOC容器,你可以很方便的扩展任何服务注入到容器中!自定义validate服务也不例外!

我们首先创建一个provider

php artisan make:provider TestProvider

然后在boot方法里写下:

public function boot(){ Validator::extend('user', function($attribute, $value, $parameters) { return !is_null(User::find($value)); });}

这行代码很好理解吧:1、调用“Validator”的“extend”方法。2、传给他俩个参数,一个是“user”,一个是返回值为boolen类型的callback 函数。3、函数中判断User表中是否含有$value值数据,如果有,返回true,如果没有,返回false。

然后在“config”的“app.php”中注册上这个provider。(如果不清楚,可以去看前一篇文章“三分钟学会laravel服务扩展”)

然后在validation.php中写上:

'user' => '此用户不存在!',

然后在校验方法中添上“user”

$validate = Validator::make($request->all(), [ 'id' => 'required|integer|between:1,10|user', 'title' => 'required|string']);

数据库中插入数据,开始检验:

OK,大功告成!是不是很简单?laravel框架是不是很强大?

laravel框架中文手册_laravel请求参数校验方法相关推荐

  1. laravel框架中文手册_Laravel框架的这些你都懂的话,它核心架构基本就懂了

    使用过arave框架的朋友都知道laravel框架里面除了提供一些基本的功能(如控制器.视图.模型)之外,还有中间件.门面.契约等,这些东西是如何在laravel框架运用起来的呢?今天就和大家详聊一下 ...

  2. laravel框架中文手册_node.js 后端框架star 排名 2020年11月更新,fastify 超 egg

    发布时间以首个版本发布(0.x)为准. 第一名: express 50.8k (2010年1月发布) 目前star 和下载量最高的老牌框架. https://github.com/expressjs/ ...

  3. Spring Boot 2.x基础教程:JSR-303实现请求参数校验

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | didispace.com/spring-boot-learni ...

  4. struts2教程(5)--请求参数校验

    一.请求参数校验介绍 校验的分类 :客户端数据校验 和服务器端数据校验 客户端数据校验 ,通过JavaScript完成校验 (改善用户体验,使用户减少出错 ) 服务器数据校验 ,使用框架内置校验功能( ...

  5. php+yii手册下载,yii中文手册-yii框架中文手册教程下载pdf格式免费版-东坡下载

    本节内容小编为大家精选带来的是pdf格式免费版yii框架中文手册教程下载文档,如果你需要一份yii框架中文手册或是一份yii框架教程,那么点击本文下方相应的下载地址下载这份"yii框架中文手 ...

  6. Springboot中请求参数校验

    1.添加依赖 <!-- 参数校验 --> <dependency><groupId>org.springframework.boot</groupId> ...

  7. Spring请求参数校验

    SpringMVC支持的数据校验是JSR303的标准,通过在bean的属性上打上@NotNull.@Max等进行验证.JSR303提供有很多annotation接口,而SpringMVC对于这些验证是 ...

  8. SpringBoot全局异常处理及前端请求参数校验

    SpringBoot全局异常捕获处理及参数校验 文章目录 SpringBoot全局异常捕获处理及参数校验 为什么要用全局异常处理? 如何进行全局异常捕获和处理? 统一结果封装 统一返回结果 枚举类 使 ...

  9. SpringMVC框架 学习DAY_02 : 接收请求参数/向模板页面转发数据/重定向与转发 /Session

    1. 接收客户端提交的请求参数 1.1. 使用HttpServletRequest接收请求参数 在处理请求的方法的参数列表中,添加HttpServletRequest类型的参数,在处理请求的过程中,调 ...

最新文章

  1. 为 protocol 中属性添加默认值
  2. “中序表达式”转“后续表达式”
  3. matlab对矩阵的单个元素修改,怎么修改矩阵中的某些元素 或者简单点说保留矩阵中的元素...
  4. php+sql创建本地项目详细步骤1——创建数据库数据表,数据库连接
  5. 小工匠聊架构-分布式场景下的并发幂等性常见的解决方案
  6. USACO Section1.5 Superprime Rib 解题报告
  7. linux 密码修改下次,问题:如何强制用户在下次登录Linux时更改密码
  8. 浅析DDD(领域驱动设计)
  9. 用java写一个日历_使用JAVA写一个简单的日历
  10. php打包压缩下载多大,php多文件打包压缩下载简单示例
  11. 计算机f8键的功能,详解:XP系统修改启动时F8键有哪些功能?
  12. SQL Server数据类型概述
  13. 移动端前端车牌识别SDK授权
  14. 用ftp上传服务器文件大小,ftp服务器上传文件大小
  15. Progressive GAN
  16. amoeba mysql proxy_mysql-proxy和amoeba 分别实现Mariadb读写分离
  17. java Flink(二十二)Flink实战之电商用户访问量(uv独立访客数)统计 使用:利用set进行数据去重、自定义布隆过滤器,解决状态数据过大、内存过大的问题、使用trigger自定义窗口触发器
  18. iOS App 签名的原理(转)
  19. Verilog HDL语言要素
  20. 杭电_ACM_汉诺塔VII

热门文章

  1. Windows下 更改 pip默认缓存目录
  2. golang 数组 最后一个_面试必问:Golang高阶Golang协程实现原理
  3. 替代java参数_java – 使用Void作为可选参数的更好的替代方法
  4. python列表片段_Python列表片段索引操作,python
  5. Linux进程间通信——使用共享内存
  6. Linux 条件变量使用细节(为何调用 pthread_cond_wait 前加锁,函数内部解锁,返回时又加锁)
  7. 数据库 / 事务的 ACID
  8. TCP/IP / 网关 IP 和 DNS 服务器 IP 为什么可以一样?
  9. 实时对讲是怎么发起的_QQ可实时显示手机电量并展示给好友 近半投票者支持该功能...
  10. oracle product文件,快速修复Oracle参数文件的另类方法