Laravel 5.4--Validate (表单验证) 使用实例
1.视图中的表单
<div class="errors"> @if(count($errors)>0) <div class="box-body"> <div class="alert alert-danger alert-dismissible"> <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> <h4><i class="icon fa fa-ban"></i>错误:</h4> @foreach($errors->all() as $error) {{$error}} @endforeach </div> </div> @endif </div> <!-- 下面是一个简单的表单提交(由于是展示案例 没有写样式) --> <form action="/test" method="post"> <input type="hidden" name="_token" value="{{ csrf_token() }}"> <label> 推荐码:</label> <input type="text" name="code"> <label>人员名称:</label> <input type="text" name="name"> <label>所属单位:</label> <input type="text" name="team"> <label>年 龄:</label> <input type="number" name="age"> <label>毕业院校:</label> <input type="text" name="school"> <label>产品案例网址:</label> <input type="url" name="url"> <button type="submit" class="btn btn-block btn-social">添加数据</button> </form>
2.控制器中验证数据
表单的发送post请求,到test路由中 发送了_token, code, name, team, age, school, url
7个数据;
如果我的路由是以Restfulapi
的写法,它会根据我的提交方式自己找到控制器中对应的store
方法:
Route::resource('test', 'TestController');
完整的控制器验证方法如下(Validate
验证方式)
public function store(Request $request) { // $data = \Input::all(); // 数据验证 $this->validate($request, [ 'code' => 'required|digits:32', //必填 必须32位 'name' => 'required|min:2|max:16', //必填 最小2位 最大16位 'team' => 'required|string', //必填 字符串 'age' => 'required|numeric', //必填 数值 'school' => 'required|max:255', //必填 最大255位 'url' => 'required|url' //必填 必须是网址 ]); // 以上是表单验证 没有验证成功是不会走下面的逻辑程序的 而且页面上会响应出抛出的异常信息 .... .... ....}
// 规则 $rules = array( 'code' => 'required|digits:32', //必填 必须32位 'name' => 'required|min:2|max:16', //必填 最小2位 最大16位 'team' => 'required|string', //必填 字符串 'age' => 'required|numeric', //必填 数值 'school' => 'required|max:255', //必填 最大255位 'url' => 'required|url' //必填 必须是网址 ); // 验证器 $validator = \Validator::make($data,$rules); // 进行验证 if($validator->passes()){ // 验证成功后的业务逻辑 ... ... }else{ // 失败后 返回提交页的页面并抛出错误 return back()->withErrors('在这里自定义错误原因!'); }
验证规则大全
accepted
在验证中该字段的值必须是yes、on、1或true,这在“同意服务协议”时很有用。
active_url
该字段必须是一个基于PHP函数checkdnsrr 的有效URL
after:date
该字段必须是给定日期后的一个值,日期将会通过PHP函数strtotime传递:
'start_date' => 'required|date|after:tomorrow'
你可以指定另外一个比较字段而不是使用strtotime验证传递的日期字符串:
'finish_date' => 'required|date|after:start_date'
alpha
该字段必须是字母
alpha_dash
该字段可以包含字母和数字,以及破折号和下划线
alpha_num
该字段必须是字母或数字
array
该字段必须是PHP数组
before:date
验证字段必须是指定日期之前的一个数值,该日期将会传递给PHP strtotime函数。
between:min,max
验证字段尺寸在给定的最小值和最大值之间,字符串、数值和文件都可以使用该规则
boolean
验证字段必须可以被转化为boolean,接收true, false, 1,0, "1", 和 "0"等输入。
confirmed
验证字段必须有一个匹配字段fooconfirmation,例如,如果验证字段是password,必须输入一个与之匹配的passwordconfirmation字段
date
验证字段必须是一个基于PHP strtotime函数的有效日期
date_format:format
验证字段必须匹配指定格式,该格式将使用PHP函数dateparsefromformat进行验证。你应该在验证字段时使用date或dateformat
different:field
验证字段必须是一个和指定字段不同的值
digits:value
验证字段必须是数字且长度为value指定的值
digits_between:min,max
验证字段数值长度必须介于最小值和最大值之间
dimensions
验证的图片尺寸必须满足该规定参数指定的约束条件:
'avatar' => 'dimensions:min_width=100,min_height=200'
有效的约束条件包括:min_width, max_width, min_height, max_height, width, height, ratio
ratio约束应该是宽度/高度,这可以通过表达式3/2或浮点数1.5来表示:
'avatar' => 'dimensions:ratio=3/2'
distinct
处理数组时,验证字段不能包含重复值:
'foo.*.id' => 'distinct'
email
验证字段必须是格式化的电子邮件地址 exists:table,column
验证字段必须存在于指定数据表
基本使用:
'state' => 'exists:states'
指定自定义列名:
'state' => 'exists:states,abbreviation'
还可以添加更多查询条件到where查询子句:
'email' => 'exists:staff,email,account_id,1'
这些条件还可以包含!:
'email' => 'exists:staff,email,role,!admin'
还可以传递NULL或NOT NULL到where子句:
'email' => 'exists:staff,email,deleted_at,NULL' 'email' => 'exists:staff,email,deleted_at,NOT_NULL'
有时,你可能需要为exists查询指定要使用的数据库连接,这可以通过在表名前通过.前置数据库连接来实现:
'email' => 'exists:connection.staff,email'
file
该验证字段必须是上传成功的文件
filled
该验证字段如果存在则不能为空
image
验证文件必须是图片(jpeg、png、bmp、gif或者svg) in:foo,bar…
验证字段值必须在给定的列表中
in_array:另一个字段
验证字段必须在另一个字段中存在
integer
验证字段必须是整型
ip
验证字段必须是IP地址
JSON
验证字段必须是有效的JSON字符串
max:value
验证字段必须小于等于最大值,和字符串、数值、文件字段的size规则一起使用 mimetypes:text/plain…
验证文件必须匹配给定的MIME文件类型之一:
'video' => 'mimetypes:video/avi,video/mpeg,video/quicktime'
为了判断上传文件的MIME类型,框架将会读取文件内容来猜测MIME类型,这可能会和客户端MIME类型不同。 mimes:foo,bar,…
验证文件的MIMIE类型必须是该规则列出的扩展类型中的一个
MIMIE规则的基本使用:
'photo' => 'mimes:jpeg,bmp,png'
尽管你只需要指定扩展,该规则实际上验证的是通过读取文件内容获取到的文件MIME类型。 完整的MIME类型列表及其相应的扩展可以在这里找到:http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
min:value
验证字段的最小值,和字符串、数值、文件字段的size规则一起使用
nullable
验证字段必须为null,这在验证一些可以为null的原生数据如整型或字符串时很有用。
not_in:foo,bar,…
验证字段值不在给定列表中
numeric
验证字段必须是数值
present
验证字段必须出现在输入数据中但不能为空。
regex:pattern
验证字段必须匹配给定正则表达式
_注:使用regex模式时,规则必须放在数组中,而不能使用管道分隔符,尤其是正则表达式中使用管道符号时。_
required
输入字段值不能为空,以下情况字段值都为空:
值为null 值是空字符串 值是空数组或者空的Coutable对象 值是上传文件但路径为空
required_if:anotherfield,value,…
验证字段在另一个字段等于指定值value时是必须的
required_unless:anotherfield,value,…
除了 anotherfield 字段等于value,验证字段不能空
required_with:foo,bar,…
验证字段只有在任一其它指定字段存在的话才是必须的
required_with_all:foo,bar,…
验证字段只有在所有指定字段存在的情况下才是必须的
required_without:foo,bar,…
验证字段只有当任一指定字段不存在的情况下才是必须的
required_without_all:foo,bar,…
验证字段只有当所有指定字段不存在的情况下才是必须的
same:field
给定字段和验证字段必须匹配
size:value
验证字段必须有和给定值value相匹配的尺寸,对字符串而言,value是相应的字符数目;对数值而言,value是给定整型值;对文件而言,value是相应的文件字节数
string
验证字段必须是字符串
timezone
验证字符必须是基于PHP函数timezoneidentifierslist的有效时区标识
unique:table,column,except,idColumn
验证字段在给定数据表上必须是唯一的,如果不指定column选项,字段名将作为默认column。
指定自定义列名:
'email' => 'unique:users,email_address'
自定义数据库连接
有时候,你可能需要自定义验证器生成的数据库连接,正如上面所看到的,设置unique:users作为验证规则将会使用默认数据库连接来查询数据库。要覆盖默认连接,在数据表名后使用“.”指定连接:
'email' => 'unique:connection.users,email_address'
强制一个唯一规则来忽略给定ID:
有时候,你可能希望在唯一检查时忽略给定ID,例如,考虑一个包含用户名、邮箱地址和位置的”更新属性“界面,当然,你将会验证邮箱地址是唯一的,然而,如果用户只改变用户名字段而并没有改变邮箱字段,你不想要因为用户已经拥有该邮箱地址而抛出验证错误,你只想要在用户提供的邮箱已经被别人使用的情况下才抛出验证错误,要告诉唯一规则忽略用户ID,可以传递ID作为第三个参数:
'email' => 'unique:users,email_address,'.$user->id
如果你的数据表使用主键字段不是id,可以指定第四个输入参数:
'email' => 'unique:users,email_address,'.$user->id.',user_id'
添加额外的where子句:
还可以指定更多条件给where子句:
'email' => 'unique:users,email_address,NULL,id,account_id,1'
在上述规则中,只有account_id为1记录才会进行唯一性检查。
url
验证字段必须是基于PHP函数filter_var过滤的的有效URL
size:value
字段值的尺寸需符合给定 value 值。对于字串来说,value 为需符合的字串长度。对于数字来说,value 为需符合的整数值。对于文件来说,value 为需符合的文件大小(单位 kb)。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
一文掌握关于Java数据结构所有知识点(欢迎一起完善)
在我们学习Java的时候,很多人会面临我不知道继续学什么或者面试会问什么的尴尬情况(我本人之前就很迷茫)。所以,我决定通过这个开源平台来帮助一些有需要的人,通过下面的内容,你会掌握系统的Java学习以及面试的相关知识。本来是想通过Gitbook的形式来制作的,后来想了想觉得可能有点大题小做。另外,我自己一个人的力量毕竟有限,希望各位有想法的朋友可以提issue和pull。 Java面试通关手册(Java学习指南)github 地址:https://github.com/Snailclimb/Java_Guide 如果你觉得有什么问题可以给我提issue,觉得不错的话你也可以star一下。目前更新的内容并不多,因为为了保证文章质量,每一篇文章我自己都看了一遍,希望大家贡献自己的力量完善。 数据结构 推荐学习视频:浙江大学数据结构国家精品教程 Queue Java集合类分析之Queue Set [由浅入深理解java集合(二)——集合 Set](https://www.jianshu.com/p/9081017a2d67) List Java 集合系列08之 List总结(LinkedLi...
- 下一篇
【产品功能】配置网卡从此与关机无缘,弹性网卡支持热插拔功能
背景 在云计算飞速发展的今天,用户ECS服务器身处的网络环境越来越复杂,弹性网卡让ECS服务器完美游走在日益复杂的网络环境中。但是以前服务器必须是Stopped状态才可以进行弹性网卡(ENI)的插拔,这样可能会影响运行在服务器上的业务。现在很高兴的向大家宣布:弹性网卡从今天开始支持热插拨,即ECS服务器只要处在稳定状态(RunningStopped),就可以对弹性网卡进行插拔操作。 弹性网卡热插拔:控制台 控制台操作弹性网卡的位置:进入控制台 -> 云服务器 ECS -> 弹性网卡。 创建弹性网卡:点击创建弹性网卡按钮,在弹窗中填写网卡名称,选择专有网络 交换机 安全组等信息后创建弹性网卡。 热挂载弹性网卡:点击弹性网卡对应的绑定实例按钮,在弹窗中选择要绑定实例。实例状态只要求为稳定状态(RunningStopped)。 热卸载弹
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS关闭SELinux安全模块
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS6,CentOS7官方镜像安装Oracle11G