Laravel4中的Validator验证扩展用法详解


Posted in PHP onJuly 26, 2016

本文实例讲述了Laravel4中的Validator验证扩展用法。分享给大家供大家参考,具体如下:

不管写接口还是写web页面,实质都是传入参数,然后进行业务逻辑,然后再输出具体内容。所以,对参数的验证是不可避免的一个环节,比如传过来的email是不是为空,是不是合法的email格式?laravel已经为phper想到简化这种逻辑的办法了。就是Validator。

Validator的使用

制造一个验证器

validator使用Validator::make可以制造一个验证器。然后使用验证器判断传入的参数是否是合法的。

看make的定义:

public Validator make(array $data, array $rules, array $messages = array(), array $customAttributes = array())

$data是keyvalue的要验证的数据

$rules是验证的规则

$messages是提示信息

$customAttributes是设置属性别名的

其中后两个消息都是为了提示信息而设置的

直接看一个例子,理解了就validator就理解了:

public function getIndex()
{
    $rules = array(
      'email' => 'required|email',
      'name' => 'required|between:1,20',
      'password' => 'required|min:8',
    );
    $message = array(
      "required" => ":attribute 不能为空",
      "between" => ":attribute 长度必须在 :min 和 :max 之间"
    );
    $attributes = array(
      "email" => '电子邮件',
      'name' => '用户名',
      'password' => '用户密码',
    );
    $validator = Validator::make(
      Input::all(),
      $rules,
      $message,
      $attributes
    );
    if ($validator->fails()) {
      $warnings = $validator->messages();
      $show_warning = $warnings->first();
      return Response::Json(compact('show_warning'));
    }
    return Response::Json("ok");
}

在这个例子中

如果你传递的参数为

/index?name=12321321321321321321321

会返回:

{
  show_warning: "电子邮件 不能为空"
}

Input::all() 将所有参数传入进行验证
rule规定了email字段不能为空,它必须符合email的格式。rule规定了email字段不能为空,它必须符合email的格式。message 说明如果违反required规则的话,显示错误的格式为:“:attribute 不能为空”
$attributes 说明了显示的错误中email显示为文字“电子邮件”

上面几个设置加起来就导致了最后参数没传email的时候显示的错误信息为:

“电子邮件 不能为空”

Validator的验证扩展

验证规则扩展

你一定会遇到比如要验证是否手机号合法的问题,laravel的Validator没有提供手机号验证的规则,因为每个国家的手机号规则是不统一的。

但是这个使用想使用Validator做验证怎么办呢?

Validator::extend('mobile', function($attribute, $value, $parameters)
{
  return preg_match('/^0?(13[0-9]|15[012356789]|18[0-9]|14[57])[0-9]{8}$/', $value);
});

然后在rule中就可以使用mobile做为规则了。

这种扩展验证规则放到哪里呢?

我建议是在filters同级目录下增加一个validator.php,然后再start/global.php中

require app_path().'/validator.php';

输出信息统一提示

上面的那个例子中,message和message和attribute都需要在使用validator的时候自己定义,比较麻烦,有没有更好的方法能统一设置呢?

validator的提示设置是按照语言来进行设置的。

语言设置是config目录下的app.php里面的locale界定的。默认为en。

而en对应的错误提示都在lang目录下的en目录里面的validation.php中设置。

你可以看一眼lang/en/validation.php 就明白对应的英文提示信息怎么出来的了。

要设置中文提示:

① 修改config/app.php里面的locale,设置为ch
② 创建 lang/ch/validation.php
③ 修改validation.php文件,将里面的提示信息修改为中文,注意提示信息中的:attribute在显示的时候会被替换成对应属性名称,attributes是设置属性的中文名字的。

从这里也就看出来了laravel对跨语言的支持是什么样子的。

lang下面的文件夹除了validation.php之外还有分页:pagination.php,提示:reminders.php文件。

laravel自带了哪些rule规则呢?

查看手册吧。。。laravel自带的验证规则

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
在Zeus Web Server中安装PHP语言支持
Oct 09 PHP
php&java(二)
Oct 09 PHP
PHP setcookie() cannot modify header information 的解决方法
Jan 09 PHP
mysql下创建字段并设置主键的php代码
May 16 PHP
php中sprintf与printf函数用法区别解析
Feb 17 PHP
PHP实现支持SSL连接的SMTP邮件发送类
Mar 05 PHP
基础的WordPress插件制作教程
Nov 24 PHP
session 加入redis的实现代码
Jul 15 PHP
PHP登录(ajax提交数据和后台校验)实例分享
Dec 29 PHP
Laravel 集成 Geetest验证码的方法
May 14 PHP
关于laravel模板中生成URL的几种模式总结
Oct 18 PHP
PHP中->和=>的意思
Mar 31 PHP
laravel5创建service provider和facade的方法详解
Jul 26 #PHP
Laravel5权限管理方法详解
Jul 26 #PHP
JavaScript实现删除电脑的关机键
Jul 26 #PHP
php 读取输出其他文件的实现方法
Jul 26 #PHP
php实现贪吃蛇小游戏
Jul 26 #PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 #PHP
php禁用函数设置及查看方法详解
Jul 25 #PHP
You might like
PHP获取文件后缀名的三个函数
2012/10/15 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
2017/05/20 PHP
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
js使用栈来实现10进制转8进制与取除数及余数
2014/06/11 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
微信小程序  Mustache语法详细介绍
2016/10/27 Javascript
JavaScript调试的多个必备小Tips
2017/01/15 Javascript
详解Javascript几种跨域方式总结
2017/02/27 Javascript
js canvas实现放大镜查看图片功能
2017/06/08 Javascript
vue+echarts实现动态绘制图表及异步加载数据的方法
2018/10/17 Javascript
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
JS删除String里某个字符的方法
2021/01/06 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python中xrange用法分析
2015/04/15 Python
python比较两个列表大小的方法
2015/07/11 Python
浅析python中的分片与截断序列
2016/08/09 Python
Python装饰器实现几类验证功能做法实例
2017/05/18 Python
python操作日志的封装方法(两种方法)
2019/05/23 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
2021/02/22 Python
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
英国买鞋网站:Charles Clinkard
2019/11/14 全球购物
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
社区志愿者培训方案
2014/06/10 职场文书
质量管理标语
2014/06/12 职场文书
施工单位工程部经理岗位职责
2015/04/09 职场文书
律政俏佳人观后感
2015/06/09 职场文书
python编程简单几行代码实现视频转换Gif示例
2021/10/05 Python
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers