如果是自己创建表单验证,请求是 post 请求,可是报错说不支持 post 请求,支持的是 get HEAD 等的话,其实就是报错了,导致了重定向,然后出现了 get,应该从这个地方入手检查
常用的表单验证
参数 | 说明 | 示例 |
---|---|---|
required | 验证的字段为必填 | 'required1' => 'required' |
required_if | 如果其它字段 anotherfield 为任意 value,则此验证字段必须存在且不为空 | 'required_if1' => 'required_if:required1,1,2,3' |
integer | 验证的字段必须是整数 | 'integer'=> 'integer' |
numeric | 必须是数字 | 'numeric'=> 'numeric' |
alpha | 只能是字母构成 | 'alpha' => 'alpha' |
alpha_num | 只能是字母和数字构成 | 'alpha_num'=> 'alpha_num' |
array | 必须是数组 | 'array1' => 'array' |
array | 验证数组时,指定的字段不能有任何重复值 | 'array1.*.id' => 'distinct' |
array | 忽略大小写差异 | 'array1.*.name' => 'distinct:ignore_case' |
between | 必须在 min(1) 和 max(100) 之间 | 'between'=> 'between:1,100' |
different | 必须与字段 field(888) 的值不同 | 'different'=> 'different:888' |
digits | 必须为 numeric,并且必须具有确切长度 value(6) | 'digits' => 'digits:6' |
digits_between | 必须为 numeric,并且长度必须在给定的 min(3) 和 max(10) 之间 | 'digits_between'=> 'digits_between:3,10' |
exists_openid | 验证的字段必须存在于给定的数据库表中,如果未指定 column 选项,则将使用字段名称 | 'exists_openid' => 'exists:users,openid' |
filled | 验证的字段在存在时不能为空 | 'filled' => 'filled' |
gt | 必须大于给定的 field,两个字段必须是相同的类型 | 'gt'=> 'gt:100' |
gte | 必须大于或等于给定的 field | 'gte'=> 'gte:200' |
lt | 必须小于给定的字段 | 'lt'=> 'lt:150' |
lte | 必须小于或等于给定的字段 | 'lte'=> 'lte:180' |
max | 必须小于或等于 value | 'max'=> 'max:120' |
min | 必须大于或等于 value | 'min'=> 'min:10' |
in | 验证字段必须包含在给定的值列表中 | 'level' => 'in:1,2,3,4,5,6,7,8' |
in | 验证字段必须包含在给定的值列表中 | 'sex' => ['required', Rule::in(['男', '女'])] |
json | 验证的字段必须是有效的 JSON 字符串 | 'json' => 'json' |
multiple_of | multiple_of:value:验证字段必须是 value 的倍数 | 'multiple_of'=> 'multiple_of:2' |
nullable | 验证字段可以为 null | 'nullable'=> 'nullable' |
present | 验证字段必须存在于输入数据中,但可以为空 | 'present'=> 'present' |
regex | 验证字段必须与给定的正则表达式匹配,具体看文档 | 'regex:pattern' => '' |
same | 验证字段的值必须与给定字段的值相同 | 'same'=> 'same:250' |
string | 验证字段必须是一个字符串。如果允许这个字段为 null,需要给这个字段分配 nullable 规则 | 'string'=> 'string' |
date | 根据 strtotime 函数,验证的字段必须是有效的日期 | 'date'=> 'date' |
after | 必须是给定的日期之后的值对应的日期 | 'after'=> 'after:' . $date |
after_or_equal | 必须在给定日期之后或与给定的日期相同 | 'after_or_equal'=> 'after_or_equal:' . $date |
before | 必须在给定的日期之前 | 'before'=> 'before:' . $date |
before_or_equal | 必须是在给定日期之前或与之相同的日期 | 'before_or_equal'=> 'before_or_equal:'. $date |
date_equals | 必须等于给定日期,日期将传递到 strtotime 函数中 | 'date_equals'=> 'date_equals:'. $date |
date_format | 必须匹配给定的 format(日期格式) | 'date_format'=> 'date_format:Y-m-d H:i:s' |
代码示例
public function index(Request $request)
{
$date = date('Y-m-d');
$params_all = $request->all();
$validator = Validator::make($params_all, [
// 可以组合使用
'required1' => 'required', // required:验证的字段必须存在于输入数据中,而不是空,null,空数组,空字符串,值为无路径的上传文件
'required_if1' => 'required_if:required1,1,2,3', // required_if:anotherfield,value,…:如果其它字段 _anotherfield_ 为任意 value,则此验证字段必须存在且不为空
'required_if2' => [
// 构建更复杂的条件,接受一个闭包,闭包函数应该返回 true 或 false,以表明是否需要验证此字段
Rule::requiredIf(function () use ($request) {
return false;
}),
],
// 'required_if3' => 'required_unless:required1,1,2,3', // required_unless:anotherfield,value,…:如果其它字段 anotherfield 不等于任一值 value ,则此验证字段必须存在且不为空
// 'required_if4' => 'required_with:required1,1,2,3', // required_with:foo,bar,…:在其他任一指定字段出现时,验证的字段才必须存在且不为空
// 'required_if5' => 'required_with_all:required1,1,2,3',// required_with_all:foo,bar,…:只有在其他指定字段全部出现时,验证的字段才必须存在且不为空
// 'required_if6' => 'required_without:required1,1,2,3',// required_without:foo,bar,…:在其他指定任一字段不出现时,验证的字段才必须存在且不为空
// 'required_if7' => 'required_without_all:required1,1,2,3',// required_without_all:foo,bar,…:只有在其他指定字段全部不出现时,验证的字段才必须存在且不为空
'integer' => 'integer', // integer:验证的字段必须是整数
'numeric' => 'numeric',// numeric:必须是数字
'alpha' => 'alpha',// alpha:只能是字母构成
'alpha_num' => 'alpha_num',// alpha_num:只能是字母和数字构成
'array1' => 'required|array',// array:必须是数组
'array1.*.id' => 'required|distinct',// distinct:验证数组时,指定的字段不能有任何重复值
'array1.*.name' => 'required|distinct:ignore_case',// ignore_case:忽略大小写差异
'between' => 'between:1,100',// between:min,max:必须在 min(1) 和 max(100) 之间,字符串、数字、数组和文件的计算方式都使用 size 方法
'different' => 'different:888',// different:field:必须与字段 field(888) 的值不同
'digits' => 'digits:6',// digits:value:必须为 numeric,并且必须具有确切长度 value(6)
'digits_between' => 'digits_between:3,10',// digits_between:min,max:必须为 numeric,并且长度必须在给定的 min(3) 和 max(10) 之间
'exists_openid' => 'exists:users,openid',// exists:table,column:验证的字段必须存在于给定的数据库表中,如果未指定 column 选项,则将使用字段名称,更多其他用法请看文档
'filled' => 'filled',// filled:验证的字段在存在时不能为空
'gt' => 'required|gt:100',// gt:field:必须大于给定的 field,两个字段必须是相同的类型。字符串、数字、数组和文件都使用 size 进行相同的评估。
'gte' => 'required|gte:200',// gte:field:必须大于或等于给定的 field
'lt' => 'required|lt:150',// lt:field:必须小于给定的字段
'lte' => 'required|lte:180',// gte:field:必须小于或等于给定的字段
'max' => 'max:120', // max:value:必须小于或等于 value,字符串、数字、数组或是文件大小的计算方式都用 size 规则
'min' => 'min:10', // min:value:必须大于或等于 value,字符串、数字、数组或是文件大小的计算方式都用 size 规则
'sex' => [
'required',
Rule::in(['男', '女']),// in:foo,bar,…:验证字段必须包含在给定的值列表中
],
'level' => 'required|in:1,2,3,4,5,6,7,8', // 验证字段必须包含在给定的值列表中
'channel_extend' => 'json',// json:验证的字段必须是有效的 JSON 字符串
'multiple_of' => 'required|multiple_of:2',// multiple_of:value:验证字段必须是 value 的倍数
'nullable' => 'nullable',// nullable:验证字段可以为 null
'present' => 'present',// present:验证字段必须存在于输入数据中,但可以为空
// 'regex:pattern' => '',// regex:pattern:验证字段必须与给定的正则表达式匹配,具体看文档
'same' => 'required|same:250',// same:field:验证字段的值必须与给定字段的值相同
'string' => 'nullable|string',// string:验证字段必须是一个字符串。如果允许这个字段为 null,需要给这个字段分配 nullable 规则
// 'unique1' => '',// unique:table,column,except,idColumn:验证字段在给定的数据库表中必须是唯一的,更复杂的看文档,不建议用
'date' => 'required|date', // date:根据 strtotime 函数,验证的字段必须是有效的日期
'date1' => 'required|date|after:' . $date, // after:date:必须是给定的日期之后的值对应的日期
'date2' => 'required|date|after_or_equal:' . $date, // after_or_equal:date:必须在给定日期之后或与给定的日期相同
'date3' => 'required|date|before:' . $date, // before:date:必须在给定的日期之前
'date4' => 'required|date|before_or_equal:' . $date, // before_or_equal:date:必须是在给定日期之前或与之相同的日期
'date5' => 'required|date_equals:' . $date, // date_equals:date:必须等于给定日期,日期将传递到 strtotime 函数中,以便转换为有效的 DateTime 实例
'date6' => 'required|date_format:Y-m-d H:i:s', // date_format:format:必须匹配给定的 format(日期格式),应该只使用 date 或者 date_format,而不是同时使用。此验证规则支持 PHP 所有的 DateTime 类
/**
* 字段包含特定值跳过验证:如果另一个字段具有指定值,则不验证该字段
* 存在时则验证:存在就验证,不存在就不验证
* 复杂条件验证:一个字段满足一个条件时,就不验证该字段等
* 验证数组:
*/
]);
if ($validator->fails()) {
dd($validator->errors());
return Tools::outErrorInfo(__LINE__, '参数错误');
}
// 获取通过验证的数据...
$params = $validator->validated();
$params = $request->all();
dd($params);
}