🧪 Form Test · Validate 类优化 3 表单集中联测页

覆盖:全字段类型(text/number/email/tel/radio/checkbox/select/textarea/file) · 验证器写法 A/B/C 零破坏 · 新增 file_upload 统一验证器必填/选填 · 三层 params 回退优先级

当前环境信息:

表单 A test_all_fields · 全字段类型 + 验证器写法 A/B/C

覆盖全部前台 HTML 控件类型 + 老验证器 3 种写法零破坏联测。
  • 写法A(完整callback数组):A-姓名(not_empty + params=1 + msg)
  • 写法B(纯字符串别名):A-邮箱(not_empty + is_email)
  • 写法C(callback字符串+自定义params/msg):A-年龄(ctype_digit 整数校验)
  • 文件字段:A-头像(老3个独立文件验证器链路:not_empty → type → size,完全不传 params,走三层回退兜底 = ≤2MB JPG/PNG/PDF)
(等待提交...)
💡 对照测试:① 全部留空提交 → 应返回多个"不能为空"(stopOnError=false 一次返回所有错误);② 正确填完 + 合法 JPG/PNG/PDF ≤2MB → 成功 JSON。

表单 B test_new_file_upload · 新增 file_upload 统一验证器(必填/选填/严格)

集中测试新增的 file_upload BUILTIN 别名(反射多参数新链路,validate_file_upload($file, $config))。
  • B-简历:必填 + 默认参数(≤2MB,JPG/PNG/PDF)→ 等同于老 3 验证器兜底行为
  • B-封面图:选填(required=false)→ 不传文件 直接通过;传了就要求 ≤1MB 且 JPG/PNG
  • B-报告:严格参数(≤512KB 且仅 PDF)
(等待提交...)
💡 对照测试:① 不传 B-简历 + 不传 B-封面图 + 传 B-报告 合法512KB内 PDF → 简历会报必填错;② B-简历合法 + 完全不传 B-封面图 + B-报告合法 → 应该全部通过(验证 required=false 生效);③ 传 JPG 到 B-报告 → 报 "报告须为 PDF 格式且 ≤ 512KB"。

表单 C test_three_layer_priority · 两层 params_config 回退优先级对照(已废弃全局过滤器)

对照测试 check_file_size / check_file_type 的【两层参数回退模型】: 优先级1(单字段 params_config 显式声明) > 优先级2(插件内置统一默认值=≤2MB / JPG+PNG+PDF)
【2026-08-10 架构调整 · 安全红线】:apply_filters('hzt_validate_default_max_filesize/mimes') 全局过滤器已彻底废弃 (消除"其他插件/被黑代码隐式改动全站默认上传限制"的结构性安全面,避免全局跨表单隐式污染)。 如需整站统一限制,请在主题侧封装 my_file_defaults(required) helper 函数显式传 P1 params_config, 不要依赖全局钩子——显式配置可 Grep 追溯、可移植、不会被第三方静默覆盖。
  • C-size 优先级1:params_config = 65536(64KB)→ 超过 64KB 一定拦截(优先级1最高,覆盖内置 2MB 默认)
  • C-type 优先级1:params_config = ['image/gif'] → 除 GIF 外全部拦截
  • C-size+type 兜底:完全不传 params_config → 行为=插件内置统一默认值 2MB / JPG+PNG+PDF(两层模型对照组,无任何全局钩子能修改)
(等待提交...)
💡 对照测试(两层模型,无任何全局钩子影响):① 准备 3 个文件:100KB JPG、100KB GIF、3MB PDF;② 第一次:C-size=100KB JPG + C-type=100KB GIF + C-fallback=500KB JPG → 预期 C-size 报 "超过64KB(优先级1 params_config 生效)",其余通过;③ 把 C-type 换成 JPG 再提交 → 预期报 "只允许 GIF 图片(优先级1 params_config 生效)";④ 把 C-fallback 传 3MB PDF 再提交 → 预期同时报大小超 + 类型错(兜底=2MB/JPG+PNG+PDF,PDF 类型对但大小超,所以只报大小超;传 1.5MB ZIP → 才报类型错),验证兜底限制真实=2MB/JPG+PNG+PDF 且不可被外部钩子修改。