代码拉取完成,页面将自动刷新
// 版权归GoFrame作者(https://goframe.org)所有。保留所有权利。
//
// 本源代码形式受MIT许可证条款约束。
// 如果未随本文件一同分发MIT许可证副本,
// 您可以在https://github.com/gogf/gf处获取。
// md5:a9832f33b234e3f3
package 验证类
import (
"strings"
gset "gitee.com/go_888/goframe/container/gset"
gcode "gitee.com/go_888/goframe/errors/gcode"
gerror "gitee.com/go_888/goframe/errors/gerror"
gstr "gitee.com/go_888/goframe/text/gstr"
)
// Error是验证结果的错误。 md5:333865ca9d205dfa
type Error interface {
X取错误码() gcode.Code
Current() error
Error() string
X取第一条字段与错误() (key string, messages map[string]error)
X取第一条规则与错误() (rule string, err error)
X取第一条错误() (err error)
X取所有错误Map数组() (items []map[string]map[string]error)
X取第一条错误Map() map[string]error
X取所有错误Map() map[string]map[string]error
String() string
Strings() (errs []string)
}
// validationError 是验证结果的验证错误。 md5:b67f2d45170f86ce
type validationError struct {
code gcode.Code // Error code.
rules []fieldRule // 按顺序的规则,仅用于保持错误顺序。 md5:865d75142a03d16d
errors map[string]map[string]error // 错误信息映射:map字段到map规则到消息. md5:57934a019c99d928
firstKey string // 第一个错误规则键(默认为空)。 md5:19b132d9be7a2e96
firstItem map[string]error // 第一个错误规则的值(默认为nil)。 md5:282d9086842ac373
}
// newValidationError 创建并返回一个验证错误。 md5:60829ca804e6f83e
func newValidationError(code gcode.Code, rules []fieldRule, fieldRuleErrorMap map[string]map[string]error) *validationError {
for field, ruleErrorMap := range fieldRuleErrorMap {
for rule, err := range ruleErrorMap {
if !gerror.X判断是否带堆栈(err) {
ruleErrorMap[rule] = gerror.NewWithOption(gerror.X结构_选项{
Stack: false,
Text: gstr.X删首尾空与字符(err.Error()),
Code: code,
})
}
}
fieldRuleErrorMap[field] = ruleErrorMap
}
// 过滤重复序列规则。 md5:7a7958b11e315baa
var ruleNameSet = gset.X创建文本()
for i := 0; i < len(rules); {
if !ruleNameSet.X加入值并跳过已存在(rules[i].X字段别名) {
// Delete repeated rule.
rules = append(rules[:i], rules[i+1:]...)
continue
}
i++
}
return &validationError{
code: code,
rules: rules,
errors: fieldRuleErrorMap,
}
}
// newValidationErrorByStr 通过字符串创建并返回一个验证错误。 md5:f8649a2f7b8f4b7c
func newValidationErrorByStr(key string, err error) *validationError {
return newValidationError(
gcode.X变量_CodeInternalError,
nil,
map[string]map[string]error{
internalErrorMapKey: {
key: err,
},
},
)
}
// X取错误码 返回当前验证错误的错误代码。 md5:e3c1f143cc6ab020
func (e *validationError) X取错误码() gcode.Code {
if e == nil {
return gcode.X变量_CodeNil
}
return e.code
}
// X取第一条错误Map 返回第一个错误消息作为映射。 md5:a50660d08282062c
func (e *validationError) X取第一条错误Map() map[string]error {
if e == nil {
return map[string]error{}
}
_, m := e.X取第一条字段与错误()
return m
}
// X取所有错误Map返回所有的错误消息作为映射。 md5:3018cad54a77010b
func (e *validationError) X取所有错误Map() map[string]map[string]error {
if e == nil {
return nil
}
return e.errors
}
// X取所有错误Map数组 如果可能,按顺序检索并返回错误项数组,否则返回无序的错误项。
// md5:cb51d4d0fa07a635
func (e *validationError) X取所有错误Map数组() (Map数组 []map[string]map[string]error) {
if e == nil {
return []map[string]map[string]error{}
}
Map数组 = make([]map[string]map[string]error, 0)
// By sequence.
if len(e.rules) > 0 {
for _, v := range e.rules {
if errorItemMap, ok := e.errors[v.X字段别名]; ok {
Map数组 = append(Map数组, map[string]map[string]error{
v.X字段别名: errorItemMap,
})
}
}
return Map数组
}
// No sequence.
for name, errorRuleMap := range e.errors {
Map数组 = append(Map数组, map[string]map[string]error{
name: errorRuleMap,
})
}
return
}
// X取第一条字段与错误 返回第一个验证规则错误的字段名称和错误消息。 md5:f1a0ce09f39c751b
func (e *validationError) X取第一条字段与错误() (字段名称 string, 错误消息 map[string]error) {
if e == nil {
return "", map[string]error{}
}
if e.firstItem != nil {
return e.firstKey, e.firstItem
}
// By sequence.
if len(e.rules) > 0 {
for _, v := range e.rules {
if errorItemMap, ok := e.errors[v.X字段别名]; ok {
e.firstKey = v.X字段别名
e.firstItem = errorItemMap
return v.X字段别名, errorItemMap
}
}
}
// No sequence.
for k, m := range e.errors {
e.firstKey = k
e.firstItem = m
return k, m
}
return "", nil
}
// X取第一条规则与错误 返回第一个错误规则及其消息字符串。 md5:ba540411a8e82a5d
func (e *validationError) X取第一条规则与错误() (规则名称 string, 错误 error) {
if e == nil {
return "", nil
}
// By sequence.
if len(e.rules) > 0 {
for _, v := range e.rules {
if errorItemMap, ok := e.errors[v.X字段别名]; ok {
for _, ruleItem := range strings.Split(v.X规则, "|") {
array := strings.Split(ruleItem, ":")
ruleItem = strings.TrimSpace(array[0])
if 错误, ok = errorItemMap[ruleItem]; ok {
return ruleItem, 错误
}
}
}
}
}
// No sequence.
for _, errorItemMap := range e.errors {
for k, v := range errorItemMap {
return k, v
}
}
return "", nil
}
// X取第一条错误 返回第一个错误消息作为字符串。
// 注意,如果没有错误序列,返回的消息可能会有所不同。
// md5:194a5e5551fbb1e3
func (e *validationError) X取第一条错误() (错误 error) {
if e == nil {
return nil
}
_, 错误 = e.X取第一条规则与错误()
return
}
// Current是FirstError的别名,实现了gerror.iCurrent接口。 md5:0a09fda4e8417f2c
func (e *validationError) Current() error {
return e.X取第一条错误()
}
// String 返回所有错误信息作为一个字符串,多个错误消息使用分号 ';' 连接。 md5:d6ac7d8c7c8a6a03
func (e *validationError) String() string {
if e == nil {
return ""
}
return strings.Join(e.Strings(), "; ")
}
// Error 实现了 error 接口的 Error 方法。 md5:6b9d58fee5a72399
func (e *validationError) Error() string {
if e == nil {
return ""
}
return e.String()
}
// Strings 将所有的错误消息返回为字符串数组。 md5:63f084a27bc91b14
func (e *validationError) Strings() (错误s []string) {
if e == nil {
return []string{}
}
错误s = make([]string, 0)
// By sequence.
if len(e.rules) > 0 {
for _, v := range e.rules {
if errorItemMap, ok := e.errors[v.X字段别名]; ok {
// 验证错误检查。 md5:f68965da177b50ef
for _, ruleItem := range strings.Split(v.X规则, "|") {
ruleItem = strings.TrimSpace(strings.Split(ruleItem, ":")[0])
if err, ok := errorItemMap[ruleItem]; ok {
错误s = append(错误s, err.Error())
}
}
// internal error checks.
for k := range internalErrKeyMap {
if err, ok := errorItemMap[k]; ok {
错误s = append(错误s, err.Error())
}
}
}
}
return 错误s
}
// No sequence.
for _, errorItemMap := range e.errors {
for _, err := range errorItemMap {
错误s = append(错误s, err.Error())
}
}
return
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。