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的格式。
\)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和\)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自带的验证规则
Laravel4中的Validator的更多相关文章
- laravel框架中使用Validator::make()方法报错
在控制器中用到了Validator::make(),它默认是use Dotenv\Validator; 但这样会出现 FatalErrorException错误 call to undefined m ...
- laravel中的validator()类验证的使用
- Jquery easyui中的有效性检查
使用过程中的一积累,备查. EasyUI 验证框使用方法: //*************************** missingMessage:未填写时显示的信息 validType:验证类型见 ...
- ASP.NET笔记之 ListView 与 DropDownList的使用(解决杨中科视频中的问题)
1.Repeater用来显示数据.ListView用来操作数据 InsertItemTemplate和updateItemTemplate**Eval(显示数据)和Bind(双向绑定:不仅是需要展现, ...
- Validator验证框架
Validator验证框架 系统分析 在设计Validator验证框架时,需要明确以下问题. (1)当用户没有输入数据时,弹出英文提示信息. (2)当用户输入的数据长度大于系统设置的数据长度,弹出英文 ...
- Javad的Validator框架概述
Java EE 6 提出了 Bean Validation 规范,使用注解的方式对 Java Bean 进行约束验证,不局限于某一层次或者某一编程模型,灵活易用.下边将向您系统的介绍该规范的各种特性. ...
- Springboot集成BeanValidation扩展二:加载jar中的资源文件
一.需求 今天在搭建Springboot框架的时候,又遇到一个需求:在多模块系统中,有些模块想自己管理BeanValidation的资源文件(默认是启动项目claspath下的 ValidationM ...
- laravel 设置自定义 Validator
转自:https://learnku.com/docs/laravel/5.4/validation/1234#custom-validation-rules 自定义验证规则 Laravel 提供了许 ...
- Spring官网阅读(十七)Spring中的数据校验
文章目录 Java中的数据校验 Bean Validation(JSR 380) 使用示例 Spring对Bean Validation的支持 Spring中的Validator 接口定义 UML类图 ...
随机推荐
- Swift语言的基础详解
1.1.关于swift · Swift 是一种适用于 iOS 和 OS X 应用的全新编程语言,它建立在最好的 C 和 Objective-C 语言之上,并且没有 C 语言的兼容性限制.Swift 采 ...
- ORACLE10g创建表空间,角色与授权
创建基础表空间,创建用户,授权. -- CREATE TABLESPACE CREATE TABLESPACE TS_JK_LAB_BASIC DATAFILE 'D:\TOOLS\ORACLE\PR ...
- java 多线程(synchronized)
package com.example; public class App { public static void main(String[] args) { doRunable dr = new ...
- Java对象表示方式1:序列化、反序列化和transient关键字的作用
平时我们在Java内存中的对象,是无法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,因此必须将对象以某种方式表示出来,即存储对象中的状态.一 ...
- C#Light 和 uLua的对比第二弹
上次的对比大家还有印象否,C#Light和ulua对比各有胜负 今天我们加入一个去反射优化,这是uLua没办法实现的优化,我们也就只能不要脸的胜之不武了 以原生执行同一测试时间为X1,数字越小的越快 ...
- Intellij Idea 2016 配置Tomcat虚拟目录
默认的idea是不需要配置虚拟目录了,它完全托管项目,但是有些时候,在开发过程中,是需要以虚拟目录的形式开发,即以:http://localhost:8080/虚拟目录名/index.html 这种形 ...
- JVM的SNMP监控配置
近期看了一下JVM对监控的支持,除了常规的JMX外居然还有SNMP, 有点意思, 这个网管协议适配的地方还真多,那么就先测试一下. 先随便找一个能在后台持续运行的java小程序,如我手头的BIO的so ...
- Java基础之String、StringBuffer、StringBuilder
1:String类:字符串(重点) (1)多个字符组成的一个序列,叫字符串. 生活中很多数据的描述都采用的是字符串的.而且我们还会对其进行操作. 所以,java就提供了这样的一个类供我们使用. (2) ...
- 用 flow.ci 让 Hexo 持续部署
编者按:感谢 @小小小杜 投稿,原文链接Juglans' Blog.如果你也想体验 flow.ci 的自动化持续部署,来 http://flow.ci 首页提交申请,邀请码随后会发送到邮箱:) flo ...
- java 线程的终止与线程中断
关于线程终止: 1.一般来讲线程在执行完毕后就会进入死亡状态,那该线程自然就终止了. 2.一些服务端的程序,可能在业务上需要,常驻系统.它本身是一个无穷的循环,用于提供服务.那对于这种线程我们该如何结 ...