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 相关文章推荐
简单的用PHP编写的导航条程序
Oct 09 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
Jul 04 PHP
解析CI的AJAX分页 另类实现方法
Jun 27 PHP
分享一则PHP定义函数代码
Feb 26 PHP
使用新浪微博API的OAuth认证发布微博实例
Mar 27 PHP
学习php设计模式 php实现装饰器模式(decorator)
Dec 07 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
Dec 14 PHP
php结合md5实现的加密解密方法
Jan 25 PHP
PHP中ID设置自增后不连续的原因分析及解决办法
Aug 21 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
Dec 28 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
Sep 26 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结合md5实现的加密解密方法
2016/01/25 PHP
yii通过小物件生成view的方法
2016/10/08 PHP
PHP实现文件上传下载实例
2016/10/18 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
IE的有条件注释判定IE版本详解(附实例代码)
2012/01/04 Javascript
简单js代码实现selece二级联动(推荐)
2014/02/18 Javascript
js实现网页随机切换背景图片的方法
2014/11/01 Javascript
jQuery中replaceWith()方法用法实例
2014/12/25 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
jQuery EasyUI之DataGrid使用实例详解
2016/01/04 Javascript
简单的js表格操作
2016/09/24 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
2015/05/05 Python
浅谈python中的实例方法、类方法和静态方法
2017/02/17 Python
基于使用paramiko执行远程linux主机命令(详解)
2017/10/16 Python
python爬取哈尔滨天气信息
2018/07/14 Python
python调用摄像头显示图像的实例
2018/08/03 Python
python3学生名片管理v2.0版
2018/11/29 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
2021/02/02 Python
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
Yahoo-PHP面试题4
2012/05/05 面试题
shell程序中如何注释
2012/01/28 面试题
工程专业求职自荐书范文
2014/02/18 职场文书
停车位租赁协议书
2014/09/24 职场文书
从事会计工作年限证明
2015/06/23 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书
2019中秋节祝福语大全,提前收藏啦
2019/09/10 职场文书
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js
Go Grpc Gateway兼容HTTP协议文档自动生成网关
2022/06/16 Golang