代码拉取完成,页面将自动刷新
// 版权归GoFrame作者(https://goframe.org)所有。保留所有权利。
//
// 本源代码形式受MIT许可证条款约束。
// 如果未随本文件一同分发MIT许可证副本,
// 您可以在https://github.com/gogf/gf处获取。
// md5:a9832f33b234e3f3
package 验证类
import (
"context"
"errors"
"reflect"
gi18n "gitee.com/go_888/goframe/i18n/gi18n"
"gitee.com/go_888/goframe/internal/reflection"
"gitee.com/go_888/goframe/internal/utils"
gstr "gitee.com/go_888/goframe/text/gstr"
gconv "gitee.com/go_888/goframe/util/gconv"
)
// X结构_验证器是用于链式操作的验证管理器。 md5:4554cd1e10f5c88e
type X结构_验证器 struct {
i18nManager *gi18n.X结构_Manager // 用于错误消息翻译的国际化管理器。 md5:cc3a7d5d034e574f
data interface{} // 验证数据,可以是地图、结构体或待验证的某个值。 md5:e15200f8fa5aa3a2
assoc interface{} // 关联数据,通常是一个映射,用于联合验证。 md5:9888fdb467a95751
rules interface{} // 自定义验证数据。 md5:35e94ac262edfe24
messages interface{} // 自定义验证错误消息,可以是字符串或CustomMsg类型。 md5:c3507018b9e0da11
ruleFuncMap map[string]X函数类型_自定义规则 // ruleFuncMap 存储当前验证器的自定义规则函数。 md5:e2e248128b108117
useAssocInsteadOfObjectAttributes bool // 使用`assoc`作为验证源,而不是来自`Object`的属性值。 md5:2ecc0aebe1d9f9e0
bail bool // 在第一次验证错误后停止验证。 md5:78c177ee4a5553f1
foreach bool // 它使用当前值作为数组,并验证其每个元素,以便进行下一个验证。 md5:84d43a2805a14d90
caseInsensitive bool // 大小写不敏感配置,适用于那些需要进行值比较的规则。 md5:12e4998422cd3091
}
// X创建 创建并返回一个新的Validator.. md5:cca3c6d267bf0323
func X创建() *X结构_验证器 {
return &X结构_验证器{
i18nManager: gi18n.Instance(), // 使用默认的国际化管理器。 md5:89cb0f7e25a6ca81
ruleFuncMap: make(map[string]X函数类型_自定义规则), // 自定义规则函数,用于存储映射。 md5:ac4fbe8b4302ecf3
}
}
// X运行 开始根据规则和消息验证给定的数据。 md5:4345968979b93f1e
func (v *X结构_验证器) X运行(上下文 context.Context) Error {
if v.data == nil {
return newValidationErrorByStr(
internalParamsErrRuleName,
errors.New(`没有传递数据进行验证`),
)
}
originValueAndKind := reflection.OriginValueAndKind(v.data)
switch originValueAndKind.OriginKind {
case reflect.Map:
isMapValidation := false
if v.rules == nil {
isMapValidation = true
} else if utils.IsMap(v.rules) || utils.IsSlice(v.rules) {
isMapValidation = true
}
if isMapValidation {
return v.doCheckMap(上下文, v.data)
}
case reflect.Struct:
isStructValidation := false
if v.rules == nil {
isStructValidation = true
} else if utils.IsMap(v.rules) || utils.IsSlice(v.rules) {
isStructValidation = true
}
if isStructValidation {
return v.doCheckStruct(上下文, v.data)
}
}
return v.doCheckValue(上下文, doCheckValueInput{
Name: "",
Value: v.data,
ValueType: reflect.TypeOf(v.data),
Rule: gconv.String(v.rules),
Messages: v.messages,
DataRaw: v.assoc,
DataMap: gconv.X取Map(v.assoc),
})
}
// X浅拷贝对象 创建并返回一个新的Validator,它是当前对象的浅拷贝。 md5:3524ef480b75393c
func (v *X结构_验证器) X浅拷贝对象() *X结构_验证器 {
newValidator := X创建()
*newValidator = *v
return newValidator
}
// X设置多语言验证 设置验证器的i18n管理器。 md5:aeb8eebb20995b34
func (v *X结构_验证器) X设置多语言验证(多语言类 *gi18n.X结构_Manager) *X结构_验证器 {
if 多语言类 == nil {
return v
}
newValidator := v.X浅拷贝对象()
newValidator.i18nManager = 多语言类
return newValidator
}
// X设置错误停止验证设置在遇到第一个验证错误后停止验证的标记。 md5:219188161ae03b77
func (v *X结构_验证器) X设置错误停止验证() *X结构_验证器 {
newValidator := v.X浅拷贝对象()
newValidator.bail = true
return newValidator
}
// X循环验证一次 通知下一个验证器将当前值作为数组对待,并验证它的每个元素。
// 注意,此装饰规则仅对下一个验证规则生效一次,特别适用于单值验证。
// md5:59e49ab195827b14
func (v *X结构_验证器) X循环验证一次() *X结构_验证器 {
newValidator := v.X浅拷贝对象()
newValidator.foreach = true
return newValidator
}
// X设置忽略大小写 设置标记,表示对于需要值比较的规则进行不区分大小写的处理。 md5:a248130276497a1f
func (v *X结构_验证器) X设置忽略大小写() *X结构_验证器 {
newValidator := v.X浅拷贝对象()
newValidator.caseInsensitive = true
return newValidator
}
// X设置规则与数据是一个链式操作函数,为当前操作设置验证数据。 md5:4bbfa1bb8271d34e
func (v *X结构_验证器) X设置规则与数据(规则与数据 interface{}) *X结构_验证器 {
if 规则与数据 == nil {
return v
}
newValidator := v.X浅拷贝对象()
newValidator.data = 规则与数据
return newValidator
}
// X设置Map数据是一个链式操作函数,为当前操作设置关联验证数据。
// 可选参数`assoc`通常类型为map,用于指定并联合验证时使用的参数映射。
// 使用带有`assoc`调用此函数也会将`useAssocInsteadOfObjectAttributes`设置为true。
// md5:45823829185f6ad6
func (v *X结构_验证器) X设置Map数据(Map数据 interface{}) *X结构_验证器 {
if Map数据 == nil {
return v
}
newValidator := v.X浅拷贝对象()
newValidator.assoc = Map数据
newValidator.useAssocInsteadOfObjectAttributes = true
return newValidator
}
// X设置规则 是一个链接操作函数,用于为当前操作设置自定义验证规则。 md5:20d3aa2d271b3575
func (v *X结构_验证器) X设置规则(规则 interface{}) *X结构_验证器 {
if 规则 == nil {
return v
}
newValidator := v.X浅拷贝对象()
newValidator.rules = 规则
return newValidator
}
// X设置自定义错误提示 是一个链式操作函数,用于为当前操作设置自定义错误消息。
// 参数 `messages` 可以为 string/[]string/map[string]string 类型。如果 `rules` 类型为 []string,它支持在错误结果中按顺序显示消息。
// md5:442bfbf7d1878c37
func (v *X结构_验证器) X设置自定义错误提示(错误提示 interface{}) *X结构_验证器 {
if 错误提示 == nil {
return v
}
newValidator := v.X浅拷贝对象()
newValidator.messages = 错误提示
return newValidator
}
// X注册自定义规则将一个自定义规则函数注册到当前Validator。 md5:3733cab7b3035ce3
func (v *X结构_验证器) X注册自定义规则(规则名称 string, 规则函数 X函数类型_自定义规则) *X结构_验证器 {
newValidator := v.X浅拷贝对象()
newValidator.ruleFuncMap[规则名称] = 规则函数
return newValidator
}
// X注册自定义规则Map 将多个自定义规则函数注册到当前Validator。 md5:38d8a4ac760a431a
func (v *X结构_验证器) X注册自定义规则Map(m map[string]X函数类型_自定义规则) *X结构_验证器 {
if m == nil {
return v
}
newValidator := v.X浅拷贝对象()
for k, v := range m {
newValidator.ruleFuncMap[k] = v
}
return newValidator
}
// getCustomRuleFunc 获取并返回指定规则的自定义规则函数。 md5:8a82be67553011ed
func (v *X结构_验证器) getCustomRuleFunc(rule string) X函数类型_自定义规则 {
ruleFunc := v.ruleFuncMap[rule]
if ruleFunc == nil {
ruleFunc = customRuleFuncMap[rule]
}
return ruleFunc
}
// checkRuleRequired 检查并返回给定的 `rule` 是否即使为 nil 或空,也是必需的。 md5:8dd4a95af0752f7f
func (v *X结构_验证器) checkRuleRequired(rule string) bool {
// 默认所需的规则。 md5:7047f401aaa9d537
if gstr.X开头判断(rule, requiredRulesPrefix) {
return true
}
// 所有自定义验证规则都是必填规则。 md5:58545e43bcc00d45
if _, ok := customRuleFuncMap[rule]; ok {
return true
}
return false
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。