2010-06-17 58 views
5

最近,我试图将我的应用程序从CakePHP迁移到Grails。到目前为止,这一直是一帆风顺,我可以用CakePHP做的所有事情,我可以在Grails中使用更少的代码来完成。不过,我有一个问题:Grails中的URL映射前缀

在CakePHP中,有一个网址前缀功能,使您给前缀一定作用URL,例如,如果我有我的控制器,这些操作:

PostController中
admin_add
admin_edit
admin_delete

我可以简单地从U访问RL:

的mysite /管理/后/加
的mysite /管理/后/编辑/ 1
的mysite /管理/后/删除,而不是/ 2

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

无论如何要在Grails中做到这一点,或者至少可以做到这一点?

回答

1

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

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

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

+0

我已经试过这一点,但问题是,我需要重复此为所有操作... – Furunomoe 2010-06-17 10:50:24

5

Grails的URL映射文档不帮助你在这种特殊情况下(AMRA,下一次自己尝试一下,并张贴一个答案只有当它的任何帮助)。丹尼尔的解决方案是接近,但不会工作,因为:

  1. 时动态创建
  2. 所有命名参数不包括“控制器”,“行动”和“身份证”是访问的动作部分必须是封闭通过params对象

一个解决办法是这样的:

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

的关键不在于名称的参数为“行动”,因为它似乎是直接映射到一个行动,不能被重写。

我也试图与通用前缀一个动态的解决方案,它似乎工作,以及:

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