laravel请求参数校验方法


Posted in PHP onOctober 10, 2019

对于后端开发而言,前端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不是一个数字,而是字符串,结果就会出现:

laravel请求参数校验方法

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

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

laravel请求参数校验方法

打开,然后找到这一行:

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

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

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

然后我们再看返回结果:

laravel请求参数校验方法

完美!只要你利用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'
]);

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

laravel请求参数校验方法

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

以上这篇laravel请求参数校验方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
Apr 18 PHP
PHP详细彻底学习Smarty
Mar 27 PHP
PHP 采集程序 常用函数
Dec 18 PHP
php 图片上传类代码
Jul 17 PHP
PHP 数组遍历方法大全(foreach,list,each)
Jun 30 PHP
php线性表顺序存储实现代码(增删查改)
Feb 16 PHP
解决ajax+php中文乱码的方法详解
Jun 09 PHP
php强制运行广告的方法
Dec 01 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
Feb 15 PHP
PHP从数组中删除元素的四种方法实例
May 12 PHP
PHP实现微信小程序人脸识别刷脸登录功能
May 24 PHP
PHP实现的策略模式示例
Mar 20 PHP
Laravel获取所有的数据库表及结构的方法
Oct 10 #PHP
Laravel 数据库加密及数据库表前缀配置方法
Oct 10 #PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 #PHP
php获取微信openid方法总结
Oct 10 #PHP
phpinfo的知识点总结
Oct 10 #PHP
phpfpm的作用和用法
Oct 10 #PHP
在laravel中实现事务回滚的方法
Oct 10 #PHP
You might like
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
php无限遍历文件夹示例分享
2014/03/04 PHP
php动态函数调用方法
2015/05/21 PHP
php实现的rc4加密解密类定义与用法示例
2018/08/16 PHP
PHP安装memcache扩展的步骤讲解
2019/02/14 PHP
JavaScript的Function详细
2006/11/14 Javascript
javascript 支持ie和firefox杰奇翻页函数
2008/07/22 Javascript
Javascript 的addEventListener()及attachEvent()区别分析
2009/05/21 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
2015/08/17 Javascript
D3.js实现文本的换行详解
2016/10/14 Javascript
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
2016/12/14 Javascript
基于JavaScript实现复选框的全选和取消全选
2017/02/09 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
浅谈angularjs依赖服务注入写法的注意点
2017/04/24 Javascript
Webpack实现按需打包Lodash的几种方法详解
2017/05/08 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
Vue this.$router.push(参数)实现页面跳转操作
2020/09/09 Javascript
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
Python设计模式之抽象工厂模式原理与用法详解
2019/01/15 Python
Python 多线程,threading模块,创建子线程的两种方式示例
2019/09/29 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
Html5页面获取微信公众号的openid的方法
2020/05/12 HTML / CSS
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
清洁工表扬信
2014/01/08 职场文书
副董事长岗位职责
2014/04/02 职场文书
迎新晚会策划方案
2014/06/13 职场文书
公司离职证明样本
2014/09/13 职场文书
青岛导游词
2015/02/12 职场文书
自我推荐信格式模板
2015/03/24 职场文书
python 算法题——快乐数的多种解法
2021/05/27 Python
React 并发功能体验(前端的并发模式)
2021/07/01 Javascript