Mojolicious url_for: абсолютный путь

В настоящее время я пытаюсь перенести одно из моих небольших приложений-катализаторов на Mojolicious (просто для удовольствия).

Допустим, мы находимся на странице: http://whatever.com/generate. На этой странице есть ссылка, например, на "сгенерированный"

При использовании катализатора (с шаблонами TT) и вы определяете ссылку как

uri_for 'generated'

он создаст ссылку на http://whatever.com/generate/generated. Но если вы определите его как

uri_for '/generated'

он сгенерирует ссылку на http://whatever.com/generated.

Я пытался сделать то же самое с url_for Mojolicious, но, похоже, это работает по-другому. Это не имеет значения, позвоню ли я

url_for 'generated'

or

url_for '/generated'

оба вызова генерируют ссылку на '/generate/generated'

Итак, мой вопрос: как заставить url_for генерировать ссылку на абсолютный маршрут. то есть в '/сгенерированный'

спасибо, гр, ldx


person ldx    schedule 10.01.2011    source источник


Ответы (2)


url_for генерирует URL-адреса относительно корня приложения. Это было сделано для переносимости: вы можете разместить свое приложение по любой ссылке, и ваши ссылки не будут битыми.

Если вам нужна ссылка на абсолютный путь, зачем вам url_for than? Вы можете использовать только строку '/generated'.

С другой стороны, если вам действительно нужен объект Mojo::URL, вы можете получить его с помощью

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

url_for при вызове без параметров возвращает текущий URL

person yko    schedule 10.01.2011
comment
Конечно. Думаю, я все еще нахожусь в мышлении катализатора, всегда использую uri_for. Но вы правы, url_for мне вообще не нужен :-) - person ldx; 10.01.2011

Вы можете легко получить абсолютный URL-адрес из url_for. Он возвращает объект Mojo::URL, поэтому вы можете просто использовать метод to_abs:

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