发布于2021-04-09 07:01 阅读(487) 评论(0) 点赞(26) 收藏(4)
表单验证
是为了防止访问者跳过客户端验证而造成的系统安全问题,一但非法用户绕过客户端验证而服务器端没有加以验证,这样就是很不安全了,所以项目必须要 进行服务器端表单验证
。
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 规则相同。 |
更多验证规则 | Laravel 所有可用的验证规则及其功能。 |
$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
: 显示添加用户页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>新增用户</title>
</head>
<body>
{{-- 如果有错误,就提示出来,模板中输出错误信息 --}}
@if($errors->any())
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
{{-- 提交到指定路由,通过别名获取到路由地址 --}}
<form action="{{ route('user.adduser') }}" method="post">
@csrf
{{-- 使用 old('account') 当页面重置的时候该字段会用上次提交的旧值继续展示,不会清空 --}}
<div>用户账号:<input type="text" name="account" value="{{ old('account') }}"></div>
<div>用户密码:<input type="password" name="pwd"></div>
<div>确认密码:<input type="password" name="pwd_confirmation"></div>
<div>用户邮箱:<input type="email" name="email" value="{{ old('email') }}"></div>
<input style="margin-top: 5px;" type="submit" value="添加用户">
</form>
</body>
</html>
UserController.php
: 用户控制器页面
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
// 显示添加用户页面
public function index() {
return view('user.index');
}
// 处理添加用户操作
public function save(Request $request) {
// 输出请求数据
dump($request->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
: 用户控制器页面
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
// 独立验证,导入 Validator
// use Illuminate\Support\Facades\Validator;
// 可以直接简写为下面这种方式
// 为什么能这么简写?因为在 /config/app.php 文件中有配置改路径
use Validator;
class UserController extends Controller
{
// 显示添加用户页面
public function index() {
return view('user.index');
}
// 处理添加用户操作
public function save(Request $request) {
// 输出请求数据
// dump($request->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
类
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
// 是否使用权限验证,false 使用,true 不使用,默认 fase
// return false;
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
// 字段名 => 规则名(多规则用 | 隔开)
'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
类
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
// 导入自定义的 Request 类
use App\Http\Requests\UserRequest;
class UserController extends Controller
{
// 显示添加用户页面
public function index() {
return view('user.index');
}
// 处理添加用户操作
public function save(UserRequest $request) {
// 输出请求数据
dump($request->all());
// aravel 5.6 之前是不会自动移除 _token 验证字段的,需要手动移除
// dump($request->except(['_token']));
// 表单数据后台验证
// 这里将不用在写验证,将上面的 Request 换成 UserRequest 即可实现效验
}
}
英文错误
切换为 中文错误
原文链接:https://blog.csdn.net/zz00008888/article/details/115485405
作者:爱出汗
链接:http://www.qianduanheidong.com/blog/article/58458/142154c0050453787282/
来源:前端黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 前端黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-3
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!