【问题标题】:Use object in Route with PlayFramework : Reverse routing在带有 PlayFramework 的 Route 中使用对象:反向路由
【发布时间】:2011-08-14 17:36:16
【问题描述】:

是否可以生成由对象映射的url?
Pojo Object Mapping 是 PlayFramework (1.2.2) 的原生函数,但是反向路由呢?

我想这样做:

Java:

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 等效的内容)

我想玩!不支持此功能,有人可以确认或反驳这个想法吗? 谢谢。

【问题讨论】:

  • 你为什么不简单地尝试一下?
  • 此代码不起作用。但也许我的语法不正确,或者存在未记录的功能。

标签: binding routing playframework symfony-1.4


【解决方案1】:

目前无法实现您所要求的。

所以通常的解决方法是这种模式:

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 的进一步版本!应该允许更简单的语法,类似于您的建议。

【讨论】:

  • 这种方法效果很好(我这样做),但我需要对 seo 更友好的 url。请参阅上面的解决方法。
【解决方案2】:

好吧,如果它会工作,它需要包声明:

GET    /folder/{models.myObject.name}/{models.myObject.id}  

【讨论】:

  • 不可能,“.”创建一个异常(播放!尝试读取正则表达式)
【解决方案3】:

根据 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>

它的工作原理:)

【讨论】:

    【解决方案4】:

    试试这个方法。与对象的 id 绑定。为我工作 &lt;a href="@{MyControler.myAction().add('o.id', myObject.id)}"&gt;Go&lt;/a&gt;

    【讨论】:

    • 这个语法的结果是什么?我有一条类似“/myControler/myAction?o.id=X”的路线,这根本不是我的预期结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 2018-06-03
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    相关资源
    最近更新 更多