Grails中的URL Mapping前缀

时间:2010-06-17 04:13:33

标签: grails url-routing

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

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

  

PostController中
  admin_add
  admin_edit
  admin_delete

我可以直接从网址访问它:

  

mysite的/管理/交/添加
  mysite的/管理/后/编辑/ 1
  mysite的/管理/交/删除/ 2

而不是:

  

mysite的/交/ admin_add
  mysite的/交/ admin_edit / 1
  mysite的/交/ admin_delete / 2

无论如何在Grails中这样做,或者至少可以选择这样做吗?

3 个答案:

答案 0 :(得分:5)

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

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

    解决方案可能如下所示:

        "/admin/$controller/$adminAction?/$param?"{
        action = { "admin_${params.adminAction}" }
    }
    

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

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

        "/$prefix/$controller/$adminAction?/$param?"{
        action = { "${params.prefix}_${params.adminAction}" }
    }
    

答案 1 :(得分:1)

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

"mysite/$prefix/$controller/$method/$id?"{
    action = "${prefix}_${method}"
}

它从前缀和方法构造动作名称。

答案 2 :(得分:1)