Grails中的URL Mapping前缀

Fur*_*moe 5 grails url-routing

最近,我正在尝试将我的应用程序从CakePHP迁移到Grails.到目前为止,它是一帆风顺的,我可以用CakePHP做的一切,我可以用Grails中的代码少做.但是,我有一个问题:

在CakePHP中,有一个URL前缀功能,使您可以为某个操作URL添加前缀,例如,如果我在我的控制器中有这些操作:

PostController
admin_add
admin_edit
admin_delete

我只需从URL访问它:

mysite/admin/post/add
mysite/admin/post/edit/1
mysite/admin/post/delete/2

代替:

mysite/post/admin_add
mysite/post/admin_edit/1
mysite/post/admin_delete/2

无论如何在Grails中这样做,或者至少是这样做的替代方案?

小智 5

Grails URL Mappings文档在这种特殊情况下无法帮助您(amra,下次自己尝试并仅在有任何帮助时发布答案).丹尼尔的解决方案很接近,但不起作用,因为:

  1. 动态创建动作部分时必须处于闭包状态
  2. 除了"controller","action"和"id"之外的所有命名参数都可以通过params对象访问

解决方案可能如下所示:

    "/admin/$controller/$adminAction?/$param?"{
    action = { "admin_${params.adminAction}" }
}
Run Code Online (Sandbox Code Playgroud)

关键是不要将参数命名为"action",因为它似乎直接映射到一个动作而不能被覆盖.

我还尝试了一个带有通用前缀的动态解决方案,它似乎也可以工作:

    "/$prefix/$controller/$adminAction?/$param?"{
    action = { "${params.prefix}_${params.adminAction}" }
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*ann 1

我没有测试它,但试试这个:

"mysite/$prefix/$controller/$method/$id?"{
    action = "${prefix}_${method}"
}
Run Code Online (Sandbox Code Playgroud)

它根据前缀和方法构造操作名称。