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 相关文章推荐
数据库的日期格式转换
Oct 09 PHP
PHP Pear 安装及使用
Mar 19 PHP
php 输出双引号"与单引号'的方法
May 09 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
Jul 03 PHP
显示程序执行时间php函数代码
Aug 29 PHP
PHP迭代器的内部执行过程详解
Nov 12 PHP
PHP代码优化的53个细节
Mar 03 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
Mar 21 PHP
php的优点总结 php有哪些优点
Jul 19 PHP
Smarty模板变量与调节器实例详解
Jul 20 PHP
Laravel 自带的Auth验证登录方法
Sep 30 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
终于听上了直流胆调频
2021/03/02 无线电
操作Oracle的php类
2006/10/09 PHP
说明的比较细的php 正则学习实例
2008/07/30 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
3款值得推荐的微信开发开源框架
2014/10/28 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
浅谈PHP之ThinkPHP框架使用详解
2020/07/21 PHP
URI、URL和URN之间的区别与联系
2006/12/20 Javascript
FireFox与IE 下js兼容触发click事件的代码
2008/11/20 Javascript
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
微信小程序 条件渲染详解
2016/10/09 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
JS高级技巧(简洁版)
2018/07/29 Javascript
vue+element模态框中新增模态框和删除功能
2019/06/11 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
layui动态渲染生成左侧3级菜单的方法(根据后台返回数据)
2019/09/23 Javascript
js面向对象方式实现拖拽效果
2021/03/03 Javascript
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
对Python3 goto 语句的使用方法详解
2019/02/16 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
艺术系大学生毕业个人自我评价
2013/09/19 职场文书
学生个人求职自荐信格式
2013/09/23 职场文书
银行实习生的自我评价
2014/01/13 职场文书
大学毕业感言50字
2014/02/07 职场文书
物流毕业生个人的自我评价
2014/02/13 职场文书
工作疏忽、懈怠的检讨书
2014/09/11 职场文书
个人合伙协议书范本
2014/10/14 职场文书
欢迎词怎么写
2015/01/23 职场文书
投诉信回复范文
2015/07/03 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python