我目前正在阅读Getting Started with Grails, Second Edition by Scott Davis & Jason Rudolph中的示例并进行操作。
这本书是用Grails 1.2编写的。
他们有一个代码示例,他们创建了一个由debug()
调用的beforeInterceptor
方法,并解释说,由于debug()
是一种方法,因此不会通过URL向用户公开。他们解释说,Closures作为Controller Actions暴露给最终用户,但方法却没有。
我也在Grails 1.3 documentation上看到,他们提到常规方法:
def auth() { ... }
被视为私有,因为它是一个方法,而不是一个闭包。这与Grails 1.3一样。
但是,从Grails 2.0.0开始,Controller Actions can be implemented as both methods and closures。
这让我想知道(并试图找出)一种方法来复制Grails 2.0.0之前在Controller中创建方法时可用的功能,该方法不会暴露给最终用户。
我想到了两种可能的方法,并且想知道哪种风格/做法更好?为什么?
private def auth()
为该方法设置allowedMethods以清空字符串:
static allowedMethods = [save: "POST", update: "POST", delete: "POST", auth: ""]
有谁知道哪种方法更可取?此外,还有其他方法,或“最佳实践技术”吗?
答案 0 :(得分:15)
在Grails 2.0中,任何标记为私有或受保护的方法都不被视为操作。
出于维护原因,以这种方式标记方法会提供更多信息,因为它在方法声明中是可见的,方法是否可操作而不必回顾allowedMethods
变量。此外,如果删除声明或未将其添加到allowedMethods
,则无法访问无法访问的方法。
答案 1 :(得分:4)
最好将其标记为私有,因为404隐藏了可以使用405的任何内容来知道有一个称为该函数的函数。 (并不是说它会有多大用处。)
同样将方法标记为私有很好,因为它在方法中显示它不是一个动作。