laravel请求参数校验方法
Laravel  /  管理员 发布于 8年前   190
对于后端开发而言,前端request请求中的参数校验是一个必不可少的环节。无论传来的参数是id还是email还是其他的参数,我们都要对参数的类型、大小、格式等等做这样或者那样的校验,然后才进行逻辑处理,以确保逻辑处理时万无一失,不会出现异样。于是乎,在controller层中就会出现一大坨的校验代码,这些校验代码甚至有时候都超过了正常的逻辑代码的数量,对于程序的扩展和维护很不利的。 但是,laravel为我们提供了一个很好的服务去解决参数校验这个问题,它就是----Validate。 首先,我们需要建一个路由,暂时就叫"test"吧,然后test对应着TestController中的test方法。 假设请求的参数中需要id、title这两个参数,并且id必须是数字,且长度是1到10,并且是DB中的一行数据的主键、title必须是字符串,id和title都不能为空。一般的框架在写的时候就会先取到id和title,然后对取到的id和title进行“是否是空”、“是否长度在1到10之间”、“通过id能否在数据库中找到数据”等等繁琐的校验,利用laravel的“Validate”你只需要这样就可以了。 如果没有错误,就会继续往下进行逻辑处理。假如说校验不通过,例如id不在1和10之间,可以通过“validate”实例中的“errors()”方法,得到所有的错误,然后将错误放回给客户端,如果想返回错误队列中的头一个错误,就写$validate->errors()->first(),如果想返回所有错误列表,就写“$validate->errors()->all()”。如下: 或者返回 假如请求参数中的id不是一个数字,而是字符串,结果就会出现: 你可能会想:返回结果能否使中文?答案当然是可以,你可以针对自己的程序,换成你任何想要的语言: 在项目中找到“resources”目录下的“lang” 中的 “en”文件夹中的“validation.php”文件, 打开,然后找到这一行: 这句话除了“:attribute”是不是其他字和返回结果一模一样?或许你已经猜到了:这就是你调用的‘integer'方法的返回结果,“:attribute”是个变量,是你传的“id”!现在,你可以写成任何语言,我把它改为中文: 然后我们再看返回结果: 完美!只要你利用Validator的make方法,在请求参数数组中对应上‘integer'、“required”等字符串就可以利用laravel提供的服务,对请求参数进行“数字”、“判空”等校验,laravel提供的众多校验方法,可以在laravel官网查询。(ps:或者直接查询validation.php这个文件!) 你或许还会想:我现在校验了id是否为空,id是否是数字,我还想校验id对应的数据能否在数据库中查得到!这能实现吗? 答案是:完全可以!在上篇文章中我介绍了laravel核心是一个IOC容器,你可以很方便的扩展任何服务注入到容器中!自定义validate服务也不例外! 我们首先创建一个provider 然后在boot方法里写下: 这行代码很好理解吧:1、调用“Validator”的“extend”方法。2、传给他俩个参数,一个是“user”,一个是返回值为boolen类型的callback 函数。3、函数中判断User表中是否含有$value值数据,如果有,返回true,如果没有,返回false。 然后在“config”的“app.php”中注册上这个provider。(如果不清楚,可以去看前一篇文章“三分钟学会laravel服务扩展”) 然后在validation.php中写上: 然后在校验方法中添上“user” 数据库中插入数据,开始检验: OK,大功告成!是不是很简单?laravel框架是不是很强大? 以上这篇laravel请求参数校验方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。Route::get('test', 'TestController@test');class TestController extends Controller{ public function test(Request $request) { }}
public function test(Request $request){ $validate = Validator::make($request->all(), [ 'id' => 'required|integer|between:1,10', 'title' => 'required|string' ]);
if($validate->fails()){ return $validate->errors()->first();}
if($validate->fails()){ return $validate->errors()->all();}
'integer' => 'The :attribute must be an integer.',
'integer' => ':attribute 必须是数字!'
php artisan make:provider TestProvider
public function boot(){ Validator::extend('user', function($attribute, $value, $parameters) { return !is_null(User::find($value)); });}
'user' => '此用户不存在!',
$validate = Validator::make($request->all(), [ 'id' => 'required|integer|between:1,10|user', 'title' => 'required|string']);
您可能感兴趣的文章:
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号