mirror of
https://gitee.com/johng/gf
synced 2026-07-02 19:31:07 +08:00
完善模板引擎功能,完善gvalid示例
This commit is contained in:
@ -56,23 +56,32 @@ func New(path string) *View {
|
||||
}
|
||||
}
|
||||
|
||||
// 设置模板文件后缀名
|
||||
//func (view *View) SetSuffix(suffix string) {
|
||||
// view.mu.Lock()
|
||||
// defer view.mu.Unlock()
|
||||
// view.suffix = suffix
|
||||
//}
|
||||
// 设置模板目录绝对路径
|
||||
func (view *View) SetPath(path string) {
|
||||
view.mu.Lock()
|
||||
defer view.mu.Unlock()
|
||||
view.path = path
|
||||
}
|
||||
|
||||
// 获取模板文件后缀名
|
||||
func (view *View) GetSuffix() string {
|
||||
// 获取模板目录绝对路径
|
||||
func (view *View) GetPath() string {
|
||||
view.mu.RLock()
|
||||
defer view.mu.RUnlock()
|
||||
return view.suffix
|
||||
return view.path
|
||||
}
|
||||
|
||||
// 直接解析模板,返回解析后的内容
|
||||
func (view *View) Parse(file string, params map[string]interface{}) ([]byte, error) {
|
||||
if t, err := view.Template(file); err == nil {
|
||||
return t.Parse(params)
|
||||
} else {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// 根据文件名称生成一个模板对象,或者获取一个现有的模板对象
|
||||
func (view *View) Template(file string) (*Template, error) {
|
||||
path := strings.TrimRight(view.path, gfile.Separator) + gfile.Separator + file + "." + view.GetSuffix()
|
||||
path := strings.TrimRight(view.GetPath(), gfile.Separator) + gfile.Separator + file + "." + view.suffix
|
||||
if t := view.tpls.Get(path); t != nil {
|
||||
return t.(*Template), nil
|
||||
}
|
||||
|
||||
@ -374,13 +374,18 @@ func checkSize(value, rulekey, ruleval string, cmsgs map[string]string) string {
|
||||
return msg
|
||||
}
|
||||
|
||||
// 检测键值对Map,注意返回参数是一个2维的关联数组,第一维键名为参数键名,第二维为带有错误的校验规则名称,值为错误信息
|
||||
func CheckMap(kvmap map[string]string, rules map[string]string, msgs map[string]interface{}) map[string]map[string]string {
|
||||
// 检测键值对参数Map,注意返回参数是一个2维的关联数组,第一维键名为参数键名,第二维为带有错误的校验规则名称,值为错误信息
|
||||
func CheckMap(params map[string]string, rules map[string]string, msgs...map[string]interface{}) map[string]map[string]string {
|
||||
// 自定义消息,非必须参数,因此这里需要做判断
|
||||
cmsgs := make(map[string]interface{})
|
||||
if len(msgs) > 0 {
|
||||
cmsgs = msgs[0]
|
||||
}
|
||||
emsgs := make(map[string]map[string]string)
|
||||
for key, value := range kvmap {
|
||||
for key, value := range params {
|
||||
if rule, ok := rules[key]; ok {
|
||||
msg, _ := msgs[key]
|
||||
if m := Check(value, rule, msg, kvmap); m != nil {
|
||||
msg, _ := cmsgs[key]
|
||||
if m := Check(value, rule, msg, params); m != nil {
|
||||
if _, ok := emsgs[key]; !ok {
|
||||
emsgs[key] = make(map[string]string)
|
||||
}
|
||||
@ -396,15 +401,15 @@ func CheckMap(kvmap map[string]string, rules map[string]string, msgs map[string]
|
||||
return nil
|
||||
}
|
||||
|
||||
// 检测单条数据的规则,其中values参数为非必须参数,可以传递所有的校验参数进来,进行多参数对比(部分校验规则需要)
|
||||
// 检测单条数据的规则,其中params参数为非必须参数,可以传递所有的校验参数进来,进行多参数对比(部分校验规则需要)
|
||||
// msgs为自定义错误信息,由于同一条数据的校验规则可能存在多条,为方便调用,参数类型支持string/map[string]string,允许传递多个自定义的错误信息,如果类型为string,那么中间使用"|"符号分隔多个自定义错误
|
||||
// values参数为表单联合校验参数,对于需要联合校验的规则有效,如:required-*、same、different
|
||||
func Check(value, rules string, msgs interface{}, values...map[string]string) map[string]string {
|
||||
func Check(value, rules string, msgs interface{}, params...map[string]string) map[string]string {
|
||||
value = strings.TrimSpace(value)
|
||||
params := make(map[string]string)
|
||||
kvmap := make(map[string]string)
|
||||
errmsgs := make(map[string]string)
|
||||
if len(values) > 0 {
|
||||
params = values[0]
|
||||
if len(params) > 0 {
|
||||
kvmap = params[0]
|
||||
}
|
||||
// 自定义错误消息处理
|
||||
list := make([]string, 0)
|
||||
@ -434,7 +439,7 @@ func Check(value, rules string, msgs interface{}, values...map[string]string) ma
|
||||
case "required-with-all": fallthrough
|
||||
case "required-without": fallthrough
|
||||
case "required-without-all":
|
||||
match = checkRequired(value, rulekey, ruleval, params)
|
||||
match = checkRequired(value, rulekey, ruleval, kvmap)
|
||||
|
||||
// 长度范围
|
||||
case "length": fallthrough
|
||||
@ -485,7 +490,7 @@ func Check(value, rules string, msgs interface{}, values...map[string]string) ma
|
||||
|
||||
// 两字段值应相同(非敏感字符判断,非类型判断)
|
||||
case "same":
|
||||
if v, ok := params[ruleval]; ok {
|
||||
if v, ok := kvmap[ruleval]; ok {
|
||||
if strings.Compare(value, v) == 0 {
|
||||
match = true
|
||||
}
|
||||
@ -494,7 +499,7 @@ func Check(value, rules string, msgs interface{}, values...map[string]string) ma
|
||||
// 两字段值不应相同(非敏感字符判断,非类型判断)
|
||||
case "different":
|
||||
match = true
|
||||
if v, ok := params[ruleval]; ok {
|
||||
if v, ok := kvmap[ruleval]; ok {
|
||||
if strings.Compare(value, v) == 0 {
|
||||
match = false
|
||||
}
|
||||
|
||||
24
geg/frame/mvc/controller/demo/template.go
Normal file
24
geg/frame/mvc/controller/demo/template.go
Normal file
@ -0,0 +1,24 @@
|
||||
package demo
|
||||
|
||||
import (
|
||||
"gitee.com/johng/gf/g/net/ghttp"
|
||||
"gitee.com/johng/gf/g/frame/gmvc"
|
||||
"gitee.com/johng/gf/g/frame/gins"
|
||||
)
|
||||
|
||||
type ControllerTemplate struct {
|
||||
gmvc.Controller
|
||||
}
|
||||
|
||||
func init() {
|
||||
gins.View().
|
||||
ghttp.GetServer().BindController("/template", &ControllerTemplate{})
|
||||
}
|
||||
|
||||
func (c *ControllerTemplate) Info() {
|
||||
c.View.Assign("name", "john")
|
||||
c.View.Display("user/index")
|
||||
}
|
||||
|
||||
|
||||
|
||||
65
geg/other/gvalid.go
Normal file
65
geg/other/gvalid.go
Normal file
@ -0,0 +1,65 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"gitee.com/johng/gf/g/util/gvalid"
|
||||
)
|
||||
|
||||
func main() {
|
||||
//rule := "length:6,16"
|
||||
//if m := gvalid.Check("123456", rule, nil); m != nil {
|
||||
// fmt.Println(m)
|
||||
//}
|
||||
//if m := gvalid.Check("12345", rule, nil); m != nil {
|
||||
// fmt.Println(m)
|
||||
// // map[length:字段长度为6到16个字符]
|
||||
//}
|
||||
|
||||
//rule := "integer|between:6,16"
|
||||
//msgs := "请输入一个整数|参数大小不对啊老铁"
|
||||
//fmt.Println(gvalid.Check("5.66", rule, msgs))
|
||||
//// map[integer:请输入一个整数 between:参数大小不对啊老铁]
|
||||
|
||||
//// 参数长度至少为6个数字或者6个字母,但是总长度不能超过16个字符
|
||||
//rule := `regex:\d{6,}|\D{6,}|max-length:16`
|
||||
//if m := gvalid.Check("123456", rule, nil); m != nil {
|
||||
// fmt.Println(m)
|
||||
//}
|
||||
//if m := gvalid.Check("abcde6", rule, nil); m != nil {
|
||||
// fmt.Println(m)
|
||||
// // map[regex:字段值不合法]
|
||||
//}
|
||||
|
||||
//params := map[string]string {
|
||||
// "passport" : "john",
|
||||
// "password" : "123456",
|
||||
// "password2" : "1234567",
|
||||
//}
|
||||
//rules := map[string]string {
|
||||
// "passport" : "required|length:6,16",
|
||||
// "password" : "required|length:6,16|same:password2",
|
||||
// "password2" : "required|length:6,16",
|
||||
//}
|
||||
//fmt.Println(gvalid.CheckMap(params, rules))
|
||||
//// map[passport:map[length:字段长度为6到16个字符] password:map[same:字段值不合法]]
|
||||
|
||||
params := map[string]string {
|
||||
"passport" : "john",
|
||||
"password" : "123456",
|
||||
"password2" : "1234567",
|
||||
}
|
||||
rules := map[string]string {
|
||||
"passport" : "required|length:6,16",
|
||||
"password" : "required|length:6,16|same:password2",
|
||||
"password2" : "required|length:6,16",
|
||||
}
|
||||
msgs := map[string]interface{} {
|
||||
"passport" : "账号不能为空|账号长度应当在:min到:max之间",
|
||||
"password" : map[string]string {
|
||||
"required" : "密码不能为空",
|
||||
"same" : "两次密码输入不相等",
|
||||
},
|
||||
}
|
||||
fmt.Println(gvalid.CheckMap(params, rules, msgs))
|
||||
// map[passport:map[length:账号长度应当在6到16之间] password:map[same:两次密码输入不相等]]
|
||||
}
|
||||
Reference in New Issue
Block a user