The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Mojolicious::Routes::Route - Route

SYNOPSIS

  use Mojolicious::Routes::Route;

  my $r = Mojolicious::Routes::Route->new;

DESCRIPTION

Mojolicious::Routes::Route is the route container used by Mojolicious::Routes.

ATTRIBUTES

Mojolicious::Routes::Route implements the following attributes.

children

  my $children = $r->children;
  $r           = $r->children([Mojolicious::Routes::Route->new]);

The children of this route, used for nesting routes.

inline

  my $bool = $r->inline;
  $r       = $r->inline($bool);

Allow "bridge" semantics for this route.

parent

  my $parent = $r->parent;
  $r         = $r->parent(Mojolicious::Routes::Route->new);

The parent of this route, usually a Mojolicious::Routes::Route object.

partial

  my $bool = $r->partial;
  $r       = $r->partial($bool);

Route has no specific end, remaining characters will be captured in path.

pattern

  my $pattern = $r->pattern;
  $r          = $r->pattern(Mojolicious::Routes::Pattern->new);

Pattern for this route, defaults to a Mojolicious::Routes::Pattern object.

METHODS

Mojolicious::Routes::Route inherits all methods from Mojo::Base and implements the following new ones.

add_child

  $r = $r->add_child(Mojolicious::Routes::Route->new);

Add a new child to this route, it will be automatically removed from its current parent if necessary.

  # Reattach route
  $r->add_child($r->find('foo'));

any

  my $route = $r->any('/:foo');
  my $route = $r->any('/:foo' => sub {...});
  my $route = $r->any('/:foo' => {foo => 'bar'} => sub {...});
  my $route = $r->any('/:foo' => [foo => qr/\w+/] => sub {...});
  my $route = $r->any([qw(GET POST)] => '/:foo' => sub {...});

Generate Mojolicious::Routes::Route object matching any of the listed HTTP request methods or all. See also the Mojolicious::Lite tutorial for many more argument variations.

  $r->any('/user')->to('user#whatever');

bridge

  my $bridge = $r->bridge;
  my $bridge = $r->bridge('/:action');
  my $bridge = $r->bridge('/:action', action => qr/\w+/);
  my $bridge = $r->bridge(format => 0);

Low-level generator for bridge routes, returns a Mojolicious::Routes::Route object.

  my $auth = $r->bridge('/user')->to('user#auth');
  $auth->get('/show')->to('#show');
  $auth->post('/create')->to('#create');

delete

  my $route = $r->delete('/:foo');
  my $route = $r->delete('/:foo' => sub {...});
  my $route = $r->delete('/:foo' => {foo => 'bar'} => sub {...});
  my $route = $r->delete('/:foo' => [foo => qr/\w+/] => sub {...});

Generate Mojolicious::Routes::Route object matching only DELETE requests. See also the Mojolicious::Lite tutorial for many more argument variations.

  $r->delete('/user')->to('user#remove');

detour

  $r = $r->detour(action => 'foo');
  $r = $r->detour('controller#action');
  $r = $r->detour(Mojolicious->new, foo => 'bar');
  $r = $r->detour('MyApp', {foo => 'bar'});

Set default parameters for this route and allow partial matching to simplify application embedding, takes the same arguments as "to".

find

  my $route = $r->find('foo');

Find child route by name, custom names have precedence over automatically generated ones.

  $r->find('show_user')->to(foo => 'bar');

get

  my $route = $r->get('/:foo');
  my $route = $r->get('/:foo' => sub {...});
  my $route = $r->get('/:foo' => {foo => 'bar'} => sub {...});
  my $route = $r->get('/:foo' => [foo => qr/\w+/] => sub {...});

Generate Mojolicious::Routes::Route object matching only GET requests. See also the Mojolicious::Lite tutorial for many more argument variations.

  $r->get('/user')->to('user#show');

has_conditions

  my $bool = $r->has_conditions;

Check if this route has active conditions.

has_custom_name

  my $bool = $r->has_custom_name;

Check if this route has a custom name.

has_websocket

  my $bool = $r->has_websocket;

Check if this route has a WebSocket ancestor.

is_endpoint

  my $bool = $r->is_endpoint;

Check if this route qualifies as an endpoint.

is_websocket

  my $bool = $r->is_websocket;

Check if this route is a WebSocket.

name

  my $name = $r->name;
  $r       = $r->name('foo');

The name of this route, defaults to an automatically generated name based on the route pattern. Note that the name current is reserved for referring to the current route.

  $r->get('/user')->to('user#show')->name('show_user');

new

  my $r = Mojolicious::Routes::Route->new;
  my $r = Mojolicious::Routes::Route->new('/:controller/:action');

Construct a new Mojolicious::Routes::Route object and "parse" pattern if necessary.

options

  my $route = $r->options('/:foo');
  my $route = $r->options('/:foo' => sub {...});
  my $route = $r->options('/:foo' => {foo => 'bar'} => sub {...});
  my $route = $r->options('/:foo' => [foo => qr/\w+/] => sub {...});

Generate Mojolicious::Routes::Route object matching only OPTIONS requests. See also the Mojolicious::Lite tutorial for many more argument variations.

  $r->options('/user')->to('user#overview');

over

  my $over = $r->over;
  $r       = $r->over(foo => 1);
  $r       = $r->over(foo => 1, bar => {baz => 'yada'});
  $r       = $r->over([foo => 1, bar => {baz => 'yada'}]);

Activate conditions for this route. Note that this automatically disables the routing cache, since conditions are too complex for caching.

  $r->get('/foo')->over(host => qr/mojolicio\.us/)->to('foo#bar');

parse

  $r = $r->parse('/:action');
  $r = $r->parse('/:action', action => qr/\w+/);
  $r = $r->parse(format => 0);

Parse pattern.

patch

  my $route = $r->patch('/:foo');
  my $route = $r->patch('/:foo' => sub {...});
  my $route = $r->patch('/:foo' => {foo => 'bar'} => sub {...});
  my $route = $r->patch('/:foo' => [foo => qr/\w+/] => sub {...});

Generate Mojolicious::Routes::Route object matching only PATCH requests. See also the Mojolicious::Lite tutorial for many more argument variations.

  $r->patch('/user')->to('user#update');

post

  my $route = $r->post('/:foo');
  my $route = $r->post('/:foo' => sub {...});
  my $route = $r->post('/:foo' => {foo => 'bar'} => sub {...});
  my $route = $r->post('/:foo' => [foo => qr/\w+/] => sub {...});

Generate Mojolicious::Routes::Route object matching only POST requests. See also the Mojolicious::Lite tutorial for many more argument variations.

  $r->post('/user')->to('user#create');

put

  my $route = $r->put('/:foo');
  my $route = $r->put('/:foo' => sub {...});
  my $route = $r->put('/:foo' => {foo => 'bar'} => sub {...});
  my $route = $r->put('/:foo' => [foo => qr/\w+/] => sub {...});

Generate Mojolicious::Routes::Route object matching only PUT requests. See also the Mojolicious::Lite tutorial for many more argument variations.

  $r->put('/user')->to('user#replace');

remove

  $r = $r->remove;

Remove route from parent.

  # Remove route completely
  $r->find('foo')->remove;

  # Reattach route to new parent
  $r->route('/foo')->add_child($r->find('bar')->remove);

render

  my $path = $r->render($suffix);
  my $path = $r->render($suffix, {foo => 'bar'});

Render route with parameters into a path.

root

  my $root = $r->root;

The Mojolicious::Routes object this route is an descendent of.

  $r->root->cache(0);

route

  my $route = $r->route;
  my $route = $r->route('/:action');
  my $route = $r->route('/:action', action => qr/\w+/);
  my $route = $r->route(format => 0);

Low-level generator for routes matching all HTTP request methods, returns a Mojolicious::Routes::Route object.

to

  my $defaults = $r->to;
  $r           = $r->to(action => 'foo');
  $r           = $r->to({action => 'foo'});
  $r           = $r->to('controller#action');
  $r           = $r->to('controller#action', foo => 'bar');
  $r           = $r->to('controller#action', {foo => 'bar'});
  $r           = $r->to(Mojolicious->new);
  $r           = $r->to(Mojolicious->new, foo => 'bar');
  $r           = $r->to(Mojolicious->new, {foo => 'bar'});
  $r           = $r->to('MyApp');
  $r           = $r->to('MyApp', foo => 'bar');
  $r           = $r->to('MyApp', {foo => 'bar'});

Set default parameters for this route.

to_string

  my $str = $r->to_string;

Stringify the whole route.

under

  my $bridge = $r->under(sub {...});
  my $bridge = $r->under('/:foo' => sub {...});
  my $bridge = $r->under('/:foo' => [foo => qr/\w+/]);
  my $bridge = $r->under({format => 0});

Generate Mojolicious::Routes::Route object for bridge route. See also the Mojolicious::Lite tutorial for many more argument variations.

  my $auth = $r->under('/user')->to('user#auth');
  $auth->get('/show')->to('#show');
  $auth->post('/create')->to('#create');

via

  my $methods = $r->via;
  $r          = $r->via('GET');
  $r          = $r->via(qw(GET POST));
  $r          = $r->via([qw(GET POST)]);

Restrict HTTP methods this route is allowed to handle, defaults to no restrictions.

  $r->route('/foo')->via(qw(GET POST))->to('foo#bar');

websocket

  my $route = $r->websocket('/:foo');
  my $route = $r->websocket('/:foo' => sub {...});
  my $route = $r->websocket('/:foo' => {foo => 'bar'} => sub {...});
  my $route = $r->websocket('/:foo' => [foo => qr/\w+/] => sub {...});

Generate Mojolicious::Routes::Route object matching only WebSocket handshakes. See also the Mojolicious::Lite tutorial for many more argument variations.

  $r->websocket('/echo')->to('example#echo');

AUTOLOAD

In addition to the "ATTRIBUTES" and "METHODS" above you can also call shortcuts provided by "root" on Mojolicious::Routes::Route objects.

  $r->root->add_shortcut(firefox => sub {
    my ($r, $path) = @_;
    $r->get($path, agent => qr/Firefox/);
  });

  $r->firefox('/welcome')->to('firefox#welcome');
  $r->firefox('/bye')->to('firefox#bye');

SEE ALSO

Mojolicious, Mojolicious::Guides, http://mojolicio.us.