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 相关文章推荐
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
Oct 09 PHP
E路文章系统PHP
Dec 11 PHP
PHP时间戳使用实例代码
Jun 07 PHP
php 小乘法表实现代码
Jul 16 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
Jun 29 PHP
php curl选项列表(超详细)
Jul 01 PHP
php出现内存位置访问无效错误问题解决方法
Aug 16 PHP
摘自织梦CMS的HTTP文件下载类
Aug 08 PHP
PHP实现的MD5结合RSA签名算法实例
Oct 07 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
Oct 11 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
Mar 16 PHP
浅谈PHP中的那些魔术常量
Dec 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
如何用php获取程序执行的时间
2013/06/09 PHP
PHP安全上传图片的方法
2015/03/21 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
2016/06/28 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
Laravel框架集合用法实例浅析
2020/05/14 PHP
php实现商城购物车的思路和源码分析
2020/07/23 PHP
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
关于flash遮盖div浮动层的解决方法
2010/07/17 Javascript
js 为label标签和div标签赋值的方法
2013/08/08 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
Bootstrap每天必学之轮播(Carousel)插件
2016/04/25 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
JS判断浏览器是否安装flash插件的简单方法
2016/09/13 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
2017/01/09 Javascript
探讨Vue.js的组件和模板
2017/10/27 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
js隐式转换的知识实例讲解
2018/09/28 Javascript
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
2020/10/13 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
零基础写python爬虫之抓取糗事百科代码分享
2014/11/06 Python
python3.x上post发送json数据
2018/03/04 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
python处理大日志文件
2019/07/23 Python
Tensorflow:转置函数 transpose的使用详解
2020/02/11 Python
python 识别登录验证码图片功能的实现代码(完整代码)
2020/07/03 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
师范生实习自我鉴定
2013/11/01 职场文书
法人代表证明书
2014/09/18 职场文书
我们的节日端午节活动总结
2015/02/11 职场文书
2015年秋季运动会广播稿
2015/08/19 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书