neděle 27. května 2012

Grails - URL mapování pro celý package

Dlouho jsem hledal způsob, jak namapovat všechny controllery ve stejném package do stejného vzoru. Hodilo by se to např. v případě, že potřebuji změnit všechny controllery pod package admin do URL "/admin/${controller}/${action}". Jednak se lépe zabezpečují a jednak mají tyto URL "hezčí" formát. V oficiální dokumentaci Grails není popsaný takový způsob mapování. Na StackOverflow mi poradili, ať udělám admin sekci jako zvláštní plugin. To je ale podle mě dost složitý na malý projekt.

Nakonec jsem objevil článek, který popisuje triky s URL mapováním v Grailsu. Trošku jsem to změnil a řešení je na světě:
for (controller in AppCtx.grailsApplication.controllerClasses) {  // AppCtx - viz článek
        def cName = controller.logicalPropertyName
        def packageName = controller.packageName
        if (packageName.contains(".admin") || packageName.contains(".springsecurity")) {
            "/admin/${cName}/$action?/$id?"(controller: cName) {
                constraints {
                }
            }
        } else {
            "/${cName}/$action?/$id?"(controller: cName) {
                constraints {
                    // apply constraints here
                }
            }
        }
}
Odteď všechny controllery, které jsou v balíku "admin", budou mít URL namapovány jako "/admin/${controller}/${action}", a zbytek klasicky jako "/${controller}/${action}.

Žádné komentáře:

Okomentovat