http://www.perlmonks.org?node_id=11114463


in reply to Re^2: Mojolicious absolute url with query in template?
in thread Mojolicious absolute url with query in template?

Oh, I think I see what you're getting at. Note the documentation for url_with:

Does the same as "url_for", but inherits query parameters from the current request.

<update> Expanded url_for vs. url_with examples. </update>

#!/usr/bin/env perl use Mojolicious::Lite -signatures; get '/' => sub ($c) { if ( !$c->param('foo') ) { $c->redirect_to( $c->url_for('index')->query(foo=>"bar") ) } else { $c->render('index') } } => 'index'; app->start; __DATA__ @@ index.html.ep % layout 'main', title => 'Hello, World!'; <pre> %= url_for('/') %= url_for('/')->to_abs %= url_for('/')->to_abs->query(abc=>"xyz") %= url_with('/') %= url_with('/')->to_abs %= url_with('/')->to_abs->query(abc=>"xyz") </pre> @@ layouts/main.html.ep <!DOCTYPE html> <html> <head><title><%= title %></title></head> <body><main> <%= content %> </main></body> </html>

Visiting http://localhost:3000/ results in a single redirect (to add the query for demonstration purposes), and then renders as:

/ http://localhost:3000/ http://localhost:3000/?abc=xyz /?foo=bar http://localhost:3000/?foo=bar http://localhost:3000/?abc=xyz

Also, note the link_to helper: %= link_to Reload => url_with('/')->to_abs results in <a href="http://localhost:3000/?foo=bar">Reload</a>