自动验证:前端会有一些对表单的验证操作(通过JavaScript),但是JavaScript有些情况下是不好用的(例如禁用JavaScript)。因此后端也需要有一套类似的机制,能够在后端实现对用户提交的数据进行验证,这个就是后端的自动验证。
建议去查看手册https://learnku.com/docs/laravel/8.x/validation/9374
(1)基本语法
使用控制器中的validate方法来完成,$request->validate($request,[验证规则]);
如果验证失败,laravel会自动将用户重定向回上一个位置,并将验证错误信息一次性存放到session中。
请求验证:
$validatedData = $request->validate(['title' => 'required|unique:posts|max:255','body' => 'required',]);//验证规则可以使用数组而不是单个 | 分隔的字符串:$validatedData = $request->validate(['title' => ['required', 'unique:posts', 'max:255'],'body' => ['required'],]);
可以使用 validateWithBag 方法来验证请求,并将所有错误信息储存在一个 命名错误信息包 中:
$validatedData = $request->validateWithBag('post', [
'title' => ['required', 'unique:posts', 'max:255'],
'body' => ['required'],
]);
在首次验证失败时停止运行
$request->validate([
'title' => 'bail|required|unique:posts|max:255',
'body' => 'required',
]);
(2)基本验证规则
required: 不能为空
max:255最长255个字符,
min:1最少1个字符
email:验证邮箱是否合法
confirmed:验证两个字段是否相同,如果验证的字段是password,则必须输入一个与之匹配的password_confirmation字段
integer:验证字段必须是整型
ip:验证字段必须是IP地址
numeric 验证字段必须是数值
max:value 验证字段必须小于等于最大值,和字符串,数值,文件字段的size规则一起使用。
min:value 验证字段的最小值,对字符串、数值、文件字段而言,和size规则使用方式一致。
size:value 验证字段必须有和给定值value想匹配的尺寸,对字符串而言,value是相应的字符数目,对数值而言,value是给定整型值;对文件而言,value是相应的文件字节数。
string 验证字段必须是字符串
unique:表名,字段,需要排除的ID
(3)输出错误信息
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
也可以单独提示
<span>{{ $errors->first('username') }}</span>

但是这样做的话,在初次打开这个页面的时候,报错的标签就已经存在了,所以需要优化一下,加上判断来判断初次打开页面有没有报错
@if($errors->has('username'))
<span>{{ $errors->first('username') }}</span>
@endif
但是官方给了更好的解决方案 error模板命令
@error("username")
<span>{{ $errors->first('username') }}</span>
@enderror
每次提交数据后 已经填好的数据也会被清空
<input type="text" name="username" placeholder="用户名" value="{{old('username')}}">
(4)把输出效果转换成中文
方法1:自定义翻译
可以在定义自动验证的时候,给validate方法传递第二个参数,第二个参数即错误提示:
$request->validate([
"username"=>["required","max:20","min:3"]
],
[
"username.required"=>'用户名必填'
]
]
);
该方式比较繁琐,每个规则都要自己定义错误信息。
方法2:借助于第三方的语言包。
由于中文和英文都是属于语言范畴,如果要切换提示文字,则需要有中文语言包的支持。目前框架只有en语言包,则需要其他语言包需要去下载。
网址:https://packagist.org composer主要的代码托管网站
中文网址:https://packagist.p2hp.com/
在官网搜索laravel-lang
注意:后期下载软件依赖的时候一般会综合一下下载量和收藏量进行下载选择。
①需要寻找下载命令
安装命令:
composer require laravel-lang/lang
②使用composer进行安装
在项目根目录下运行上述的命令


翻译:
语言包文件在vendor/caoue/laravel-lang中;将你需要的语言目录复制到resources/lang目录下即可。
③使用方法
将需要的语言包复制到语言包目录:
根据提示:
翻译:在文件(config/app.php)中修改locale的值,改成你需要使用的语言简称。
简称其实就是语言包的文件夹名称。
测试效果:
注意:并不是所有的字段都有对应的翻译(或者有的翻译可能不是很准确),如果想自己定义翻译,则需要去修改语言包文件代码。
文件位置:
修改后续的值,或者新增需要的元素:
效果:
(5)删除下载的语言包文件
如果依赖的语言包文件已经没用的话,可以直接执行命令来删除刚才的语言包依赖
composer remove laravel-lang/lang

