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 に答える