mirror of
https://gitee.com/johng/gf
synced 2026-06-06 16:21:40 +08:00
This pull request upgrades the GoFrame framework and all related dependencies from version `v2.9.8` (and similar) to `v2.10.0` across the codebase. It also refactors the `.make_version.sh` script to improve cross-platform compatibility when editing files, and ensures documentation reflects the new version. These changes help keep the project up-to-date and simplify version management. **Dependency upgrades:** * Updated all `go.mod` files in the main repo and contrib modules to require `github.com/gogf/gf/v2 v2.10.0` (replacing `v2.9.8` and similar) for consistency and latest features/bugfixes. [[1]](diffhunk://#diff-ee0abb9c50b9f91f424349123e31b7b1ba1e1e4f7497250422696c5bda2e74ceL6-R12) [[2]](diffhunk://#diff-cef597d401b6dad225f9e2e431bdde7e53cb60bdf287624cef38a6a7bb9ae7a3L7-R7) [[3]](diffhunk://#diff-970f7eacff9cd97a0d8a00d59ea8041eedaa21c7544c6669aaa58ca692c6b274L6-R6) [[4]](diffhunk://#diff-c23d0ca80cd6588b7df84de8ef84713f0ce0555ba05d2d9e7f5d1e0324b1ed3aL6-R6) [[5]](diffhunk://#diff-aa230a2b1198e6ef8afeb7f48335eb2e2f51d87d918d63c4d891fea612d18ff0L6-R6) [[6]](diffhunk://#diff-86c2390edbede20803cd862908fe95e7207f7dbabd5089ddd4838e1f26e7fecaL6-R6) [[7]](diffhunk://#diff-5e1af33d38ced461fc0e13981d7051e125876d1692efc3aa9cb4b7faa4c18addL7-R7) [[8]](diffhunk://#diff-8c6247829130f219981483ccf25af699a63de99afedeb0dd5c1b7bd8ff0919bdL9-R9) [[9]](diffhunk://#diff-accbd2d37d45e51db3fcb0468043b1e1fd53eeac9e3d3558467ef24444188d2fL7-R7) [[10]](diffhunk://#diff-15fac9b8e76d2782594c91da72f6a6f42fc18e359c3be35bf6564ac3ca09f700L6-R7) [[11]](diffhunk://#diff-8e1a76afd564b6073aac7b02ca59f296ae45a24da3dc4d5c40f18169f48ceba1L6-R6) [[12]](diffhunk://#diff-00a9db26966c21305c72e8f659628dffaff0d6e9dc98a751406d2141d51a5d90L7-R7) [[13]](diffhunk://#diff-2cbf2f66d5cb77d9f4d00e4c0ce45055620fff50c941a588da31729f09a81f1bL6-R7) [[14]](diffhunk://#diff-20a21d07addeea398c4adb76d077875894a73b4b5b181b9df1fafe497d3fc843L6-R6) [[15]](diffhunk://#diff-909670f1c29b0bba24faf1420504b9eacdff124c4cbbec1ddec5de60653ad007L6-R6) [[16]](diffhunk://#diff-8eef5f0c081743f8002e0faba686e838b323cb53b749706ea42e0440aaa793f1L7-R7) [[17]](diffhunk://#diff-82345842a29e8eaffa4f51aab96fa2aa78597e6639fe4b0ece797bc60edacea8L6-R6) **Script improvements:** * Refactored `.make_version.sh` to use a new `sed_inplace` function for in-place file editing, improving cross-platform support (Linux/macOS) and removing reliance on a global variable for the sed command. * Updated `.make_version.sh` to use `sed_inplace` consistently for version replacement and dependency cleanup steps, ensuring robust file modification regardless of OS. [[1]](diffhunk://#diff-546db9206ba1b7973e6187a1025b3904a0b08681d40d0ee4767082040fd0f661L46-R47) [[2]](diffhunk://#diff-546db9206ba1b7973e6187a1025b3904a0b08681d40d0ee4767082040fd0f661L84-R97) * Added a step in `.make_version.sh` to insert local development replace directives for Go modules, streamlining local testing and development. **Documentation updates:** * Updated contributor badge version in `README.MD` and `README.zh_CN.MD` to reflect the new GoFrame version (`v2.10.0`). [[1]](diffhunk://#diff-01e6d9ffed056a02cae8d8a0ec5d476a64d017bf85c0d5a94bb23ca21f33f5aaL48-R48) [[2]](diffhunk://#diff-c93759cb9a9500f20e551c741eb167fc72825fd638d36121357feb8253ce6ac1L48-R48)
110 lines
4.7 KiB
Go
110 lines
4.7 KiB
Go
// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
|
|
//
|
|
// This Source Code Form is subject to the terms of the MIT License.
|
|
// If a copy of the MIT was not distributed with this file,
|
|
// You can obtain one at https://github.com/gogf/gf.
|
|
|
|
// Package gvalid implements powerful and useful data/form validation functionality.
|
|
package gvalid
|
|
|
|
import (
|
|
"context"
|
|
"reflect"
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/gogf/gf/v2/internal/intlog"
|
|
"github.com/gogf/gf/v2/text/gregex"
|
|
"github.com/gogf/gf/v2/util/gtag"
|
|
)
|
|
|
|
// CustomMsg is the custom error message type,
|
|
// like: map[field] => string|map[rule]string
|
|
type CustomMsg = map[string]any
|
|
|
|
// fieldRule defined the alias name and rule string for specified field.
|
|
type fieldRule struct {
|
|
Name string // Alias name for the field.
|
|
Rule string // Rule string like: "max:6"
|
|
IsMeta bool // Is this rule is from gmeta.Meta, which marks it as whole struct rule.
|
|
FieldKind reflect.Kind // Original kind of struct field, which is used for parameter type checks.
|
|
FieldType reflect.Type // Type of struct field, which is used for parameter type checks.
|
|
}
|
|
|
|
// iNoValidation is an interface that marks current struct not validated by package `gvalid`.
|
|
type iNoValidation interface {
|
|
NoValidation()
|
|
}
|
|
|
|
const (
|
|
singleRulePattern = `^([\w-]+):{0,1}(.*)` // regular expression pattern for single validation rule.
|
|
internalRulesErrRuleName = "InvalidRules" // rule name for internal invalid rules validation error.
|
|
internalParamsErrRuleName = "InvalidParams" // rule name for internal invalid params validation error.
|
|
internalObjectErrRuleName = "InvalidObject" // rule name for internal invalid object validation error.
|
|
internalErrorMapKey = "__InternalError__" // error map key for internal errors.
|
|
internalDefaultRuleName = "__default__" // default rule name for i18n error message format if no i18n message found for specified error rule.
|
|
ruleMessagePrefixForI18n = "gf.gvalid.rule." // prefix string for each rule configuration in i18n content.
|
|
noValidationTagName = gtag.NoValidation // no validation tag name for struct attribute.
|
|
ruleNameRegex = "regex" // the name for rule "regex"
|
|
ruleNameNotRegex = "not-regex" // the name for rule "not-regex"
|
|
ruleNameForeach = "foreach" // the name for rule "foreach"
|
|
ruleNameBail = "bail" // the name for rule "bail"
|
|
ruleNameCi = "ci" // the name for rule "ci"
|
|
emptyJsonArrayStr = "[]" // Empty json string for array type.
|
|
emptyJsonObjectStr = "{}" // Empty json string for object type.
|
|
requiredRulesPrefix = "required" // requiredRulesPrefix specifies the rule prefix that must be validated even the value is empty (nil or empty).
|
|
)
|
|
|
|
var (
|
|
// defaultErrorMessages is the default error messages.
|
|
// Note that these messages are synchronized from ./i18n/en/validation.toml .
|
|
defaultErrorMessages = map[string]string{
|
|
internalDefaultRuleName: "The {field} value `{value}` is invalid",
|
|
}
|
|
|
|
// structTagPriority specifies the validation tag priority array.
|
|
structTagPriority = []string{gtag.Valid, gtag.ValidShort}
|
|
|
|
// aliasNameTagPriority specifies the alias tag priority array.
|
|
aliasNameTagPriority = []string{gtag.Param, gtag.ParamShort}
|
|
|
|
// all internal error keys.
|
|
internalErrKeyMap = map[string]string{
|
|
internalRulesErrRuleName: internalRulesErrRuleName,
|
|
internalParamsErrRuleName: internalParamsErrRuleName,
|
|
internalObjectErrRuleName: internalObjectErrRuleName,
|
|
}
|
|
// regular expression object for single rule
|
|
// which is compiled just once and of repeatable usage.
|
|
ruleRegex = regexp.MustCompile(singleRulePattern)
|
|
|
|
// decorativeRuleMap defines all rules that are just marked rules which have neither functional meaning
|
|
// nor error messages.
|
|
decorativeRuleMap = map[string]bool{
|
|
ruleNameForeach: true,
|
|
ruleNameBail: true,
|
|
ruleNameCi: true,
|
|
}
|
|
)
|
|
|
|
// ParseTagValue parses one sequence tag to field, rule and error message.
|
|
// The sequence tag is like: [alias@]rule[...#msg...]
|
|
func ParseTagValue(tag string) (field, rule, msg string) {
|
|
// Complete sequence tag.
|
|
// Example: name@required|length:2,20|password3|same:password1#||Password strength is insufficient | Passwords are not match
|
|
match, _ := gregex.MatchString(`\s*((\w+)\s*@){0,1}\s*([^#]+)\s*(#\s*(.*)){0,1}\s*`, tag)
|
|
if len(match) > 5 {
|
|
msg = strings.TrimSpace(match[5])
|
|
rule = strings.TrimSpace(match[3])
|
|
field = strings.TrimSpace(match[2])
|
|
} else {
|
|
intlog.Errorf(context.TODO(), `invalid validation tag value: %s`, tag)
|
|
}
|
|
return
|
|
}
|
|
|
|
// GetTags returns the validation tags.
|
|
func GetTags() []string {
|
|
return structTagPriority
|
|
}
|