如果是自己创建表单验证,请求是 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);
}