我正在尝试为url中指定的控制器添加后缀。
我想将/admin/mycontroller/
映射到MyAdminController。
我尝试过很多变化而没有运气......有什么建议吗?
static mappings = {
"/admin/$controller/$action?/$id?"{
controller = controller.endsWith('Admin')?controller: (controller+'Admin')
}
}
答案 0 :(得分:1)
我通过迭代控制器伪像并动态构建url贴图来完成此任务:
class UrlMappings {
static mappings = {
def adminControllers = ACH.grailsApplication.controllerClasses
.findAll({ it.logicalPropertyName.endsWith('Admin')})
.collect({ it.logicalPropertyName })
adminControllers.each { controllerName ->
def shortName = controllerName - 'Admin'
"/admin/$shortName/$action?/$id?" (controller: controllerName)
}
}
}
其中ACH是blog post Burt Beckwith中{{3}}所述的自定义ApplicationContextHolder
。
编辑:
这会创建网址结构,/admin/blah
映射到BlahAdminController
,但不包含/admin/blahAdmin
。
答案 1 :(得分:-1)
按照惯例,grails需要使用Controller
我建议您将MyControllerAdmin
重命名为MyAdminController
我认为,如果要对其进行强化,将网址中的变量命名为controller
可能会有问题。
尝试类似:
static mappings = {
"/admin/$cName/$action?/$id?"{
controller = cName.endsWith('Admin') ? cName : (cName + 'Admin')
}
}
UrlMappings
中的订单问题,请检查其他规则是否会干扰此规则。