此功能通过 FilterConfiguringFilter
实现, 它本身就是一个过滤器.
实现一个过滤器
保持过滤器链能够依次执行
Filters 负责依次调用下一个过滤器来依次处理请求。这通常需要完成下面的表达式:
var MyFilter = func(c *revel.Controller, fc []revel.Filter) {
// .. 做一些预处理 ..
fc[0](c, fc[1:]) // 执行下一个过滤器
// .. 做一些后期处理 ..
}
获取控制器类型
Filters 接受一个 *Controller
类型的参数, 而不是被调用的实际的控制器类型。如果过滤器需要访问实际的控制器类型,可以这样实现:
var MyFilter = func(c *revel.Controller, fc []revel.Filter) {
if ac, err := c.AppController.(*MyController); err == nil {
// 判定存在一个 *MyController 实例...
}
fc[0](c, fc[1:]) // 执行下一个过滤器
}
注意:这种模式往往说明拦截器可能是实现所需功能的好的机制的一个指标。
标签:Revel
相关阅读 >>
更多相关阅读请进入《Revel》频道 >>

Go语言101
一个与时俱进的Go编程知识库。