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 操作excel文件的方法小结
Dec 31 PHP
PHP企业级应用之常见缓存技术篇
Jan 27 PHP
JavaScript创建命名空间的5种写法
Jun 24 PHP
php实现的支持断点续传的文件下载类
Sep 23 PHP
PHP中is_dir()函数使用指南
May 08 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
Sep 10 PHP
PHP中JSON的应用技巧
Oct 10 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
Apr 26 PHP
Yii2简单实现给表单添加验证码的方法
Jul 18 PHP
php获取当前月与上个月月初及月末时间戳的方法
Dec 05 PHP
解析 thinkphp 框架中的部分方法
May 07 PHP
PHP依赖注入原理与用法分析
Aug 21 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 读取文件内容代码(txt,js等)
2009/12/06 PHP
php中文验证码实现示例分享
2014/01/12 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
php微信扫码支付 php公众号支付
2019/03/24 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
JQuery 风格的HTML文本转义
2009/07/01 Javascript
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
javascript处理table表格的代码
2010/12/06 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
详解JavaScript对W3C DOM模版的支持情况
2015/06/16 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
JS中关于正则的巧妙操作
2017/08/31 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
2017/10/21 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
2017/11/21 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
2018/05/24 jQuery
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多(步骤详解)
2020/01/14 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
2020/03/04 Javascript
uni-app如何页面传参数的几种方法总结
2020/04/28 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
2019/04/27 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
django xadmin中form_layout添加字段显示方式
2020/03/30 Python
jupyter notebook 的工作空间设置操作
2020/04/20 Python
简单的Python人脸识别系统
2020/07/14 Python
python PIL模块的基本使用
2020/09/29 Python
会计的岗位职责
2014/03/15 职场文书
小兵张嘎观后感300字
2015/06/03 职场文书
推普标语口号大全
2015/12/26 职场文书