JavaScript也可以进行一些验证操作,但是有些情况下不好用(禁用JavaScript)。这时候就要使用后端的一些机制。能够在后端对用户提交的数据进行验证,这个就是后端的自动验证。
案例:编写自动验证实例
使用biaodan表单页面,提交到testbiaodan路由
先创建两个路由:
Route::get('biaodan','TestController@biaodan');
Route::post('testbiaodan','TestController@testbiaodan')->name('tb');
编写控制器方法:
// 使用biaodan表单页面,提交到testbiaodan来进行自动验证
public function biaodan(){
return view('biaodan');
}
//用来自动验证
public function testbiaodan(Request $request){
/*
1,自动验证
2,获取数据
3,根据写入的结果进行不同的响应
*/
$this->validate($request,[
//对于不同的的规则,用|分隔开
'id' => 'required|min:2|max:6',
'name' => 'required|min:2|max:255|string',
// integer在设定的0-100范围内,写不写效果一样,不写integer的话,当要验证的信息的超过设定的0-100,将验证失败
'age' => 'required|integer|min:0|max:100',
'email' => 'required|email'
]);
// 验证成功后提示信息
echo '验证成功';
}
创建biaodan视图文件,提交地址为testbiaodan
<form action="{{route('tb')}}" method="post">
<input type="text" name="id" placeholder="学号"/>
<br />
<input type="text" name="name" placeholder="姓名"/>
<br />
<input type="text" name="age" placeholder="年龄"/>
<br />
<input type="text" name="email" placeholder="邮箱"/>
<br />
<!-- 下面两种方式都可使用 -->
<!-- <input type="hidden" name="_token" value="{{csrf_token()}}"/> -->
{{csrf_field()}}
<input type="submit"/>
</form>
验证规则大全
array
该字段必须是PHP数组
before:date
验证字段必须是指定日期之前的一个数值,该日期将会传递给PHP strtotime函数。
between:min,max
验证字段尺寸在给定的最小值和最大值之间,字符串、数值和文件都可以使用该规则
boolean
验证字段必须可以被转化为boolean,接收true, false, 1,0, “1”, 和 "0"等输入。
confirmed
验证字段必须有一个匹配字段foo_confirmation,例如,如果验证字段是password,必须输入一个与之匹配的password_confirmation字段
date
验证字段必须是一个基于PHP strtotime函数的有效日期
date_format:format
验证字段必须匹配指定格式,该格式将使用PHP函数date_parse_from_format进行验证。你应该在验证字段时使用date或date_format
different:field
验证字段必须是一个和指定字段不同的值
digits:value
验证字段必须是数字且长度为value指定的值
digits_between:min,max
验证字段数值长度必须介于最小值和最大值之间
distinct
处理数组时,验证字段不能包含重复值:
email
验证字段必须是格式化的电子邮件地址
exists:table,column
验证字段必须存在于指定数据表
基本使用:
file
该验证字段必须是上传成功的文件
filled
该验证字段如果存在则不能为空
image
验证文件必须是图片(jpeg、png、bmp、gif或者svg)
in:foo,bar…
验证字段值必须在给定的列表中
in_array:另一个字段
验证字段必须在另一个字段中存在
integer
验证字段必须是整型
ip
验证字段必须是IP地址
JSON
验证字段必须是有效的JSON字符串
max:value
验证字段必须小于等于最大值,和字符串、数值、文件字段的size规则一起使用
min:value
验证字段的最小值,对字符串、数值、文件字段而言,和size规则使用方式一致。
nullable
验证字段必须为null,这在验证一些可以为null的原生数据如整型或字符串时很有用。
numeric
验证字段必须是数值 (包括正数,负数)
present
验证字段必须出现在输入数据中但可以为空。
regex:pattern
验证字段必须匹配给定正则表达式
required
输入字段值不能为空,以下情况字段值都为空:
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
验证字段必须是字符串
验证成功提示信息
在TestController.php定义的用来验证的方法里,添加echo " 内容"
输出信息。。
如果表单页面验证成功就会显示输出成功信息。
//用来自动验证
public function testbiaodan(Request $request){
$this->validate($request,[
'name' => 'required|min:2|max:255',
'age' => 'required|integer|min:0|max:100',
'email' => 'required|email'
]);
// 验证成功后提示信息
echo '验证成功';
}
显示验证错误信息提示(英文提示,中文提示)
一,英文提示(默认)
在表单视图文件里,加入下面这些判断错误信息,$errors变量用来提取错误信息。
@if (count($errors) > 0)
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
@endif
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">
<!-- Styles -->
<style>
</style>
</head>
<body>
<form action="{{route('tb')}}" method="post">
<input type="text" name="id" placeholder="学号"/>
<br />
<input type="text" name="name" placeholder="姓名"/>
<br />
<input type="text" name="age" placeholder="年龄"/>
<br />
<input type="text" name="email" placeholder="邮箱"/>
<br />
<!-- 下面两种方式都可使用 -->
<!-- <input type="hidden" name="_token" value="{{csrf_token()}}"/> -->
{{csrf_field()}}
<input type="submit"/>
<!-- ********************************************************************************* -->
<!-- 判断验证错误信息,输出的错误信息是英文,需要翻译成中文 -->
<!-- 如果错误信息的数量大于0 -->
<!-- 遍历错误,输出错误信息 -->
@if (count($errors) > 0)
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
@endif
</form>
</body>
</html>
现在如果验证失败,就会有提示以下信息
二,中文提示,(自定义错误提示,语言包)
1,自定义验证错误提示:
在验证信息的TestController里定义的方法里,validate的第三个参数用来定自定义错误信息提示,
第三参数,自定义错误信息
验证错误后的提示信息
键对应验证信息的表单的name属性值+判断信息,值是错误提示信息
’name.required’=>‘用户名不能为空’,
//用来自动验证
public function testbiaodan(Request $request){
$this->validate($request,[
'id' => 'required|min:2|max:6',
'name' => 'required|min:2|max:255',
// integer在设定的0-100范围内,写不写效果一样,不写integer的话,当要验证的信息的超过设定的0-100,将验证失败
'age' => 'required|integer|min:0|max:100',
'email' => 'required|email'
],[
// 第三参数,自定义错误信息
// 验证错误后的提示信息
// 键对应验证信息的name,加判断信息,值是错误提示信息
'name.required'=>'用户名不能为空',
'name.min'=>'用户名最少为2个字符',
'name.max'=>'用户名最少为2个字符',
]
);
// 验证成功后提示信息
echo '验证成功';
}
现在我们给name的required设置了用户名不能为空。如果用户名表单那里没有输入内容直接提交后,会提示
验证失败后会提示如下信息:
看提示信息会发现,自定义的会是中文,不自定义的还是英文。要想全部提示中文,还得一个个给他设置错误提示,比较麻烦,繁琐,写起来也不方便。那样就可以通过下载的中文语言包来显示中文提示信息。
2,下载中文语言包来,显示中文提示信息。
在自己的larave项目的目录下面,按住shift键+鼠标右击,打开命令行窗口。
输入php artisan 来查看自己的laravel的版本,比如我的就是,7.1.3
下一步就是下载语言包,打开网址查看一下,下载语言包的命令,下载语言包的网址
比如我的就是7.1.3版本的就用composer require caouecs/laravel-lang:~6.0
命令来下载
在文件下打开命令行输入composer require caouecs/laravel-lang:~6.0
开始下载,
提示下载完成之后,打开laravel文件的,目录,。D:\laraveldemo\one\vendor\caouecs\laravel-lang\src\zh-CN
下载后的目录在自己laravel项目下的vendor\caouecs\laravel-lang\src\zh-CN下
复制zh-CN文件到resources/lang下:
**修改配置:**在config/app.php文件进行修改。
现在就可以测试下语言包能不能使用。 删除刚才自定义错误信息的语句(validate的第三个参数)
测试:
在表单里什么都不输入信息,进行验证,提示语言都变成了中文。
也可以给语言包里自定义提示信息:
D:\laraveldemo\one\resources\lang\zh-CN\validation.php里添加提示信息
id是要判断的表单的name属性值,也是TestController.php里面的id表单判断的键名(总之,这几个字段得保持一致)
现在就是提示编号不能为空了