本站停止维护,已转移至laravel学习网;欢迎大家移步访问!

laravel请求参数校验

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

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

    我们对传递过来的参数可以这么校验,先建路由再建控制器,这个类在控制器基类,不用引用,这个就不多说了,在控制器里这么写

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

    这个的意思就是:假设请求的参数中需要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()”。如下:

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

或者

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

假如请求参数中的id不是一个数字,而是字符串,正常情况下你的浏览器会出现这样的提示:The id must be integer

    你可能会想:返回结果能否使中文?答案当然是可以,你可以针对自己的程序,换成你任何想要的语言:在项目中找到“resources”目录下的“lang” 中的 “en”文件夹中的“validation.php”文件,打开后找到这一行,大概在42行

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

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

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

大功告成了,具体的验证方法laravel官网都有。

转载请注明 :一沙网络原文出处:http://bbs.earnp.com/article/192
问题交流群 :562864481
1
作者没有开启打赏
发布时间 :2016-09-26 23:56:43
分享

0 个评论

    还没有评论,感觉来抢沙发吧!

要回复文章请先登录注册