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
第十三节--对象串行化
Nov 16 PHP
php UTF-8、Unicode和BOM问题
May 18 PHP
实例讲解PHP面向对象之多态
Aug 20 PHP
递归实现php数组转xml的代码分享
May 14 PHP
PHP上传文件参考配置大文件上传
Dec 16 PHP
PHP MYSQL实现登陆和模糊查询两大功能
Feb 05 PHP
php文件上传的两种实现方法
Apr 04 PHP
PHP 读取大文件并显示的简单实例(推荐)
Aug 12 PHP
PHP单态模式简单用法示例
Nov 16 PHP
PHP+Ajax实现的博客文章添加类别功能示例
Mar 29 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
May 02 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
Terran兵种介绍
2020/03/14 星际争霸
非常不错的MySQL优化的8条经验
2008/03/24 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
PHP7标量类型declare用法实例分析
2016/09/26 PHP
Jquey拖拽控件Draggable使用方法(asp.net环境)
2010/09/28 Javascript
javascript 使td内容不换行不撑开
2012/11/29 Javascript
JavaScript中的运算符种类及其规则介绍
2013/09/26 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
2014/05/13 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
一些你可能不熟悉的JS知识点总结
2019/03/15 Javascript
vue-router 起步步骤详解
2019/03/26 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
Python中的CURL PycURL使用例子
2014/06/01 Python
基于python编写的微博应用
2014/10/17 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
Python变量作用范围实例分析
2015/07/07 Python
Python实现购物车购物小程序
2018/04/18 Python
Python空间数据处理之GDAL读写遥感图像
2019/08/01 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
python 经典数字滤波实例
2019/12/16 Python
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
波兰快递服务:Globkurier.pl
2019/11/08 全球购物
Shell编程面试题
2012/05/30 面试题
《鞋匠的儿子》教学反思
2014/03/02 职场文书
信用社竞聘演讲稿
2014/05/16 职场文书
实验心得体会
2014/09/05 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
教师节老师寄语
2015/05/28 职场文书
海上钢琴师的观后感
2015/06/11 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis
铁拳制作人赞《铁拳7》老头环Mod:制作精良 但别弄了
2022/04/03 其他游戏
MySQL串行化隔离级别(间隙锁实现)
2022/06/16 MySQL