是否可以生成由对象映射的网址?
Pojo Object Mapping是PlayFramework(1.2.2)的原生功能,但反向路由呢?
我想这样做:
爪哇:
class MyControler extends Controller {
public static function myAction(MyObject o) {}
}
路线:(类似这样?如果可能,我不知道这样做的语法!)
GET /folder/{myObject.name}/{myObject.id} MyController.myAction(myObject)
模板:
<a href="@{MyControler.myAction(myObject)}">Go</a>
预期结果:
<a href="/folder/xxNamexx/33">Go</a>
(我有一个Symfony背景,我搜索等效于Object Route Class)
我觉得玩!不支持这个功能,有人可以确认或反驳这个想法吗? 谢谢。
答案 0 :(得分:3)
目前无法满足您的要求。
通常的解决方法是这种模式:
GET /folder/{id} MyController.myAction
class MyController extends Controller {
public static void myAction(Long id) {
MyObject o = MyObject.findById(id);
// You may probably want to add the following line:
notFoundIfNull(o);
// … then your code here
}
}
解决方案不是那么冗长,但我同意Play的更多版本!应该允许更简单的语法,类似于你的建议。
答案 1 :(得分:0)
嗯,如果它将起作用,它将需要包声明:
GET /folder/{models.myObject.name}/{models.myObject.id}
答案 2 :(得分:0)
根据Julien Richard-Foy的说法,没有解决方案。
所以我提出了一个解决方法,有点难看,因为该路线将被描述两次。 这个快速的解决方案打破了MVC模型,但是可以做其他事情,将UrlHelper发送到模板中以示例。
在您的模型中,添加generateUrlDetail()
方法:
public String generateUrlDetail() {
return String.format("/myRoute/%s/%d-%s.html", JavaExtensions.slugify(this.foo.name), this.id, JavaExtensions.slugify(this.bar));
}
提示:玩!允许定义具有超过必要标识符的路由。因此,可以编写一个包含2个以上变量的路径,但只会在动作中使用该ID。
GET /myRoute/{foo}/{<[0-9]+>id}-{bar}.html Foo.detail(id)
在你的模板中:
<a href="${myObject.generateUrlDetail()}">Go</a>
Render : <a href="/myRoute/foo-name/13-bar-description.html">Go</a>
它有效:)
答案 3 :(得分:0)
尝试这种方法。绑定对象的id。适合我
<a href="@{MyControler.myAction().add('o.id', myObject.id)}">Go</a>