2011-01-10 126 views
8

我目前正试图将我的一个小型催化剂应用程序移植到Mojolicious (仅仅为了它的乐趣)。我们在页面上:http://whatever.com/generate。 该网页上有“生成”Mojolicious url_for:绝对路径

当使用催化剂(与TT模板)的链接,例如,你定义的联系,

uri_for 'generated' 

它会生成一个链接http://whatever.com/generate/generated 但如果你把它定义为

uri_for '/generated' 

它会生成一个链接http://whatever.com/generated

我试图用Mojolicious的url_for做同样的事情,但它似乎工作方式不同。 它不会使一个差异性阉我打电话

url_for 'generated' 

url_for '/generated' 

两个呼叫生成一个链接到/生成/生成“

所以我的问题是:我该怎么办使url_for生成一个绝对路线的链接。 即以 '/' 产生

感谢, GR, LDX

回答

10

url_for产生相对于应用程序根网址。这是为了便携性而完成的:您可以将您的应用放在任何网址上,并且链接不会被破坏。

如果你需要一个绝对路径的链接,为什么你需要url_for比?您只能使用字符串'/generated'

从另一方面,如果你真的需要魔精:: URL对象,你可以用

<%= url_for->path('/generated') %> 

url_for得到它的时候不叫回报PARAMS当前URL

+0

确实。我想我仍然处于催化剂的心态,总是使用uri_for。但你是对的,我根本不需要url_for :-) – ldx 2011-01-10 14:39:38

10

你可以很容易地从url_for绝对URL 。它返回一个Mojo :: URL对象,所以你可以使用to_abs方法:

$ perl -Mojo -E 'a("/" => sub { $s=shift;$s->render(text=>$s->url_for("/")->to_abs) })->start' get/
http://localhost:13733/