1
0
mirror of https://github.com/astaxie/beego.git synced 2024-06-28 05:04:12 +00:00

fix reflect find methodByName

This commit is contained in:
astaxie 2013-07-25 16:00:42 +08:00
parent 23deaedd39
commit 7c610ee7c9

View File

@ -94,7 +94,8 @@ func (p *ControllerRegistor) Add(pattern string, c ControllerInterface, mappingM
} }
} }
} }
t := reflect.Indirect(reflect.ValueOf(c)).Type() reflectVal := reflect.Indirect(reflect.ValueOf(c))
t := reflectVal.Type()
methods := make(map[string]string) methods := make(map[string]string)
if len(mappingMethods) > 0 { if len(mappingMethods) > 0 {
semi := strings.Split(mappingMethods[0], ";") semi := strings.Split(mappingMethods[0], ";")
@ -106,7 +107,7 @@ func (p *ControllerRegistor) Add(pattern string, c ControllerInterface, mappingM
comma := strings.Split(colon[0], ",") comma := strings.Split(colon[0], ",")
for _, m := range comma { for _, m := range comma {
if m == "*" || inSlice(strings.ToLower(m), HTTPMETHOD) { if m == "*" || inSlice(strings.ToLower(m), HTTPMETHOD) {
if _, ok := t.MethodByName(colon[1]); ok { if val := reflectVal.FieldByName(colon[1]); val.IsValid() {
methods[strings.ToLower(m)] = colon[1] methods[strings.ToLower(m)] = colon[1]
} else { } else {
panic(colon[1] + " method don't exist in the controller " + t.Name()) panic(colon[1] + " method don't exist in the controller " + t.Name())