PHP - Laravel 表单验证(验证规则与使用 $this->validate()、Validator::make()、Requests)
二、
三、
四、
五、将自带的
发布日期:2021-06-29 11:38:03
浏览次数:3
分类:技术文章
本文共 4690 字,大约阅读时间需要 15 分钟。
一、简介
-
表单验证
是为了防止访问者跳过客户端验证而造成的系统安全问题,一但非法用户绕过客户端验证而服务器端没有加以验证,这样就是很不安全了,所以项目必须要进行服务器端表单验证
。 -
Laravel
提供了多种不同的验证方法来对应用程序传入的数据进行验证。 -
常用
验证规则
规则名 说明 required
不能为空。 max:value
字段值必须小于或等于 value
,对于字符串来说,value
为字符数。min:value
字段值必须大于或等于 value
,对于字符串来说,value
为字符数。email
验证邮箱是否合法。 url
验证字段必须是有效的 URL
格式。confirmed
验证两个字段是否相同,如果验证的字段是 password
,则必须输入一个与之匹配的passward_confirmation
字段。integer
验证字段必须是整型。 ip
验证字段必须是 IP
地址。numeric
验证字段必须是数值。 size:value
value
验证字段必须有和给定值value
想匹配的尺寸;对字符串而言,value
是相应的字符数目;对数值而言,value
是给定整型值;对文件而言,value
是相应的文件字节数。string
验证字段必须是字符串。 unique
表名,字段,需要排除的 ID
。between:min,max
验证字段值的大小是否介于指定的 min
和max
之间,字符串数值或是文件大小的计算方式和size
规则相同。更多验证规则
。
二、$this->validate()
(案例:Form
表单添加用户)
-
web.php
: 用户操作都放在UserController
文件中// 添加用户页面Route::get('adduser', 'UserController@index') -> name('user.adduser');// 添加用户处理Route::post('adduser', 'UserController@save') -> name('user.adduser');
-
user/index.blade.php
: 显示添加用户页面新增用户 { {-- 如果有错误,就提示出来,模板中输出错误信息 --}} @if($errors->any())- @foreach ($errors->all() as $error)
- { { $error }} @endforeach
-
UserController.php
: 用户控制器页面all()); // aravel 5.6 之前是不会自动移除 _token 验证字段的,需要手动移除 dump($request->except(['_token'])); // 表单数据后台验证 // laravel 5.6 之后会返回一个 $input,$input 会将验证字段 _token 移除掉 $input = $this->validate($request, [ // 字段名 => 规则名(多规则用 | 隔开) 'account' => 'required|between:2,6', // 确认密码的 confirmed 属性一定要写在原始密码上 'pwd' => 'required|confirmed', 'pwd_confirmation' => 'required', 'email' => 'required|email' ], [ // 字段名.规则名 => 错误语句 'account.required' => '用户名不能为空', 'account.between' => '用户名必须为2-6个字符', 'pwd.required' => '密码不能为空', 'pwd.confirmed' => '两次密码不一致', 'email.required' => '邮箱不能为空', 'email.email' => '邮箱格式不正确', ]); // 输出请求数据 dump($input); }}
-
Demo 效果:
三、Validator::make()
(独立验证
)
-
还是
上面的案例代码
,现在需要通过独立验证
方式来验证。 -
UserController.php
: 用户控制器页面all()); // aravel 5.6 之前是不会自动移除 _token 验证字段的,需要手动移除 // dump($request->except(['_token'])); // 表单数据后台验证 $validate = Validator::make($request->all(), [ // 字段名 => 规则名(多规则用 | 隔开) 'account' => 'required|between:2,6', // 确认密码的 confirmed 属性一定要写在原始密码上 'pwd' => 'required|confirmed', 'pwd_confirmation' => 'required', 'email' => 'required|email' ], [ // 字段名.规则名 => 错误语句 'account.required' => '用户名不能为空', 'account.between' => '用户名必须为2-6个字符', 'pwd.required' => '密码不能为空', 'pwd_confirmation.required' => '确认密码不能为空', 'pwd.confirmed' => '两次密码不一致', 'email.required' => '邮箱不能为空', 'email.email' => '邮箱格式不正确', ]); // 输出验证对象所有可用方法 // dump(get_class_methods($validate)); // 输出验证对象 // dump($validate); // 判断是否验证失败 if ($validate->fails()) { // 返回错误结果 return redirect()->back()->withErrors($validate); } // 输出请求数据 dump($request->all()); }}
四、Requests
(验证器
)
-
还是
上面的案例代码
,之前是在当前方法内进行验证,现在需要通过验证器
来验证 -
创建
验证器
(自定义Request
类)$ php artisan make:request UserRequest
在
Http
文件夹中会多出来一个Requests
文件夹,它会存放所有验证器,现在里面就包含了刚才新建的自定义Request
类UserRequest
-
UserRequest.php
: 将效验规则写入到UserRequest
类规则名(多规则用 | 隔开) 'account' => 'required|between:2,6', // 确认密码的 confirmed 属性一定要写在原始密码上 'pwd' => 'required|confirmed', 'pwd_confirmation' => 'required', 'email' => 'required|email' ]; } // 错误提示 public function messages() { return [ // 字段名.规则名 => 错误语句 'account.required' => '用户名不能为空', 'account.between' => '用户名必须为2-6个字符', 'pwd.required' => '密码不能为空', 'pwd_confirmation.required' => '确认密码不能为空', 'pwd.confirmed' => '两次密码不一致', 'email.required' => '邮箱不能为空', 'email.email' => '邮箱格式不正确', ]; }}
-
UserController.php
: 用户控制器页面使用UserRequest
类all()); // aravel 5.6 之前是不会自动移除 _token 验证字段的,需要手动移除 // dump($request->except(['_token'])); // 表单数据后台验证 // 这里将不用在写验证,将上面的 Request 换成 UserRequest 即可实现效验 }}
五、将自带的 英文错误
切换为 中文错误
- 在上面都是自定义验证错误,如果不通过自定义错误,而是将系统配置默认的英文错误切换成中文,这样会更方便简单,可以参考
转载地址:https://blog.csdn.net/zz00008888/article/details/115485405 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月18日 10时12分38秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
为什么LED灯会越用越暗?
2019-04-29
为什么说卷积神经网络,是深度学习算法应用最成功的领域之一?
2019-04-29
在电网工作,有多高大上?
2019-04-29
「2020年大学生电子设计竞赛分享」电源题,省一等奖!
2019-04-29
又一国产开源微内核操作系统上线!源代码已开放下载
2019-04-29
10年老兵!从大学毕业生到嵌入式系统工程师的修炼之道……
2019-04-29
如何才能学好单片机?
2019-04-29
一根网线有这么多“花样”,你知道吗?
2019-04-29
雷军1994年写的诗一样的代码,我把它运行起来了!
2019-04-29
2020年大学生电子设计竞赛,B题,单相在线式不间断电源,详细技术方案!
2019-04-29
大佬终于把鸿蒙OS讲明白了,收藏了!
2019-04-29
C语言指针,这可能是史上最干最全的讲解啦(附代码)!!!
2019-04-29
国内大陆有哪些芯片公司处于世界前10?一起看看!
2019-04-29
单精度、双精度、多精度和混合精度计算的区别是什么?
2019-04-29
中国35位“大国工匠”榜单出炉!西工大、西电合计占半壁江山!清华仅1人!...
2019-04-29
知乎热议:嵌入式开发中C++好用吗?
2019-04-29
2020,Python 已死?
2019-04-29
漫画:程序员相亲?哈哈哈哈哈哈
2019-04-29
30种EMC标准电路分享,再不收藏就晚了!
2019-04-29
这100道Linux常见面试题,看看你会多少?
2019-04-29