7 // Autocalls any defined before and after methods on the target controller
8 // If either calls returns a value then the result is returned
9 func BeforeAfterFilter(c *Controller, fc []Filter) {
11 if resultValue := beforeAfterFilterInvoke(FINALLY, c); resultValue != nil && !resultValue.IsNil() {
12 c.Result = resultValue.Interface().(Result)
16 if err := recover(); err != nil {
17 if resultValue := beforeAfterFilterInvoke(PANIC, c); resultValue != nil && !resultValue.IsNil() {
18 c.Result = resultValue.Interface().(Result)
23 if resultValue := beforeAfterFilterInvoke(BEFORE, c); resultValue != nil && !resultValue.IsNil() {
24 c.Result = resultValue.Interface().(Result)
27 if resultValue := beforeAfterFilterInvoke(AFTER, c); resultValue != nil && !resultValue.IsNil() {
28 c.Result = resultValue.Interface().(Result)
32 func beforeAfterFilterInvoke(method When, c *Controller) (r *reflect.Value) {
37 var index []*ControllerFieldPath
40 index = c.Type.ControllerEvents.Before
42 index = c.Type.ControllerEvents.After
44 index = c.Type.ControllerEvents.Finally
46 index = c.Type.ControllerEvents.Panic
52 for _, function := range index {
53 result := function.Invoke(reflect.ValueOf(c.AppController), nil)[0]