将命名空间放入 url

put namespace in url

这里是 grails 2.3.8。当我 g:link 执行某些控制器操作时,我想在控制器名称前面的 url 中放置一个名称空间。

例如: 调用 "app/apple/eat" -> "app/admin/apple/eat"

由于涉及许多动态和静态脚手架控制器,我想我可以用一些 UrlMappings 表达式来做到这一点,但我不知道该怎么做。

我尝试过类似的方法但没有成功:

static mappings = {
    "/apple/$action?/$id?" (redirect:"/admin/apple/$action?/$id?")
}

在 AppleController 中使用命名空间 = "admin" 也不起作用

谢谢指教

例如

call "app/apple/eat" -> "app/admin/apple/eat"

您可以通过 grails-app/conf/UrlMappings.groovy 使用以下配置(这对整个应用程序有效):

class UrlMappings {

    static mappings = {
        "/admin/$controller/$action?/$id?(.$format)?"{
            constraints {
                // apply constraints here
            }
        }

        "/"(view:"/index")
        "500"(view:'/error')
    }
}

使用此配置,您的控制器可通过以下方式访问:

http://localhost:8080/apple/admin/apple/eat/1

etc.

或者!

如果您只在 admin 前缀下使用 apple,那么您可以在 grails-app/conf/UrlMappings 中执行以下操作。groovy:

class UrlMappings {

    static mappings = {
        "/admin/apple/$action?/$id?"(controller : "apple")
        "/$controller/$action?/$id?(.$format)?"{
            constraints {
                // apply constraints here
            }
        }

        "/"(view:"/index")
        "500"(view:'/error')
    }
}

或者!

如果您有更多重定向,可以将它们组合在一起:

static mappings = {
    group("/admin") {
        "/apple/$action?/$id?(.${format})?"(controller: 'apple')
        "/peach/$action?/$id?(.${format})?"(controller: 'peach')
    }
    ...