Mojolicious url_for:绝对路径

ldx*_*ldx 9 perl catalyst mojolicious

我目前正试图将我的一个较小的催化剂应用程序移植到Mojolicious(只是为了它的乐趣).

假设我们在页面上:http://whatever.com/generate.在该页面上有一个链接,例如"生成"

使用催化剂(使用TT模板)并将链接定义为

uri_for 'generated'
Run Code Online (Sandbox Code Playgroud)

它将生成一个指向http://whatever.com/generate/generated的链接 但是如果你将其定义为

uri_for '/generated'
Run Code Online (Sandbox Code Playgroud)

它将生成一个指向http://whatever.com/generated的链接

我尝试用Mojolicious'url_for做同样的事情,但似乎工作方式不同.我打电话的时候并没有什么不同

url_for 'generated'
Run Code Online (Sandbox Code Playgroud)

要么

url_for '/generated'
Run Code Online (Sandbox Code Playgroud)

两个调用都生成一个'/ generate/generated'的链接

所以我的问题是:如何让url_for生成绝对路径的链接.即'/ generated'

谢谢,Gr,ldx

yko*_*yko 11

url_for生成相对于app root的url.这样做是为了便于携带:您可以将您的应用放在任何网址上,并且您的链接不会被破坏.

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

另一方面,如果你真的需要Mojo :: URL对象,你可以得到它

<%= url_for->path('/generated') %>
Run Code Online (Sandbox Code Playgroud)

url_for 当没有params调用时返回当前url


小智 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/
Run Code Online (Sandbox Code Playgroud)