0

我正在尝试向 url 中指定的控制器添加后缀。

我想映射/admin/mycontroller/到 MyAdminController。

我已经尝试了很多没有运气的变化......有什么建议吗?

static mappings = {
    "/admin/$controller/$action?/$id?"{
        controller = controller.endsWith('Admin')?controller: (controller+'Admin')  
    }
}
4

2 回答 2

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 是Burt Beckwith在此博客文章ApplicationContextHolder描述的一种习惯。

编辑:

这将创建 url 结构,以便/admin/blah映射到BlahAdminController,但不包括/admin/blahAdmin.

于 2013-03-01T23:12:24.000 回答
-1

按照惯例,grails 需要您的控制器类名以Controller

  1. 我建议你将你的重命名MyControllerAdminMyAdminController

  2. 我认为在 url 中命名一个变量可能是一个问题,就controller好像你想对其进行覆盖一样。尝试类似:

    static mappings = {
        "/admin/$cName/$action?/$id?"{
            controller = cName.endsWith('Admin') ? cName : (cName + 'Admin')  
        }
    }
    
  3. 订单中的事项UrlMappings,检查另一条规则是否不会干扰这一规则。

于 2013-03-01T23:01:27.480 回答