3

我正在处理的项目目前使用过滤器来处理各种片段。过滤器本身工作得很好。我遇到的问题是,在指定应该在哪些控制器上执行过滤器时,我最终得到了一个非常大的列表。从功能上讲,这可以正常工作,但最终会变得丑陋且有些笨拙。

def filters =
{
        filterSomething(controller:'one|two|three|...|xyz', action:'*')
        {
            //before filter here, not important.
        }
    }

有没有办法指定过滤器仅适用于给定包或包列表中的控制器?

如果没有开箱即用的东西,我正在考虑将一些东西绑定到引导程序中并以这种方式设置我的列表。

4

1 回答 1

2

您可以对所有控制器进行过滤,然后检查它们的包,然后决定要做什么。有更好和更优雅的编码方式,但只是为了给你一个想法。

 class MyFilters {
def grailsApplication


def filters = {
    all(controller:'*', action:'*') {
        before = {
            if (checkController(['com.package.name'],controllerName)){
            }
        }
    }
}


def searchInList(list,packageName){
    for (keyword in list) {
        if (packageName.contains(keyword)) return true
    }
    return false
}

Boolean checkController(def includePackageList,cname) {
    def dlist = grailsApplication.getArtefacts("Controller")
    def filteredList= dlist.findAll{ searchInList(includePackageList,it.getPackageName()) }
    return filteredList.contains(cname)
}
}
于 2013-04-25T18:18:28.327 回答