Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Routes::Tiny(3)	      User Contributed Perl Documentation      Routes::Tiny(3)

NAME
       Routes::Tiny - Routes

SYNOPSIS
	   my $routes =	Routes::Tiny->new;

	   # Constraints
	   $routes->add_route('/articles/:id', constraints => {id => qr/\d+/});

	   # Optional placeholders
	   $routes->add_route('/archive/:year/(:month)?');

	   # Defaults
	   $routes->add_route('/articles/:id',
	       defaults	=> {controller => 'bar', action	=> 'foo'});

	   # Grouping (matches 'hello-bar')
	   $routes->add_route('/(:foo)-bar');

	   # Globbing (matches 'photos/foo/bar/baz')
	   $routes->add_route('/photos/*other');

	   # Path building
	   $routes->add_route('/:foo/:bar', name => 'default');
	   $routes->build_path('default', foo => 'hello', bar => 'world');

	   # Matching
	   my $match = $routes->match('/hello/world');
	   my $captures_hashref	= $match->captures;

	   # Matching with method
	   $routes->add_route('/hello/world', method =>	'GET');
	   my $match = $routes->match('/hello/world', method =>	'GET');

	   # Subroutes
	   my $subroutes = Routes::Tiny->new;
	   $subroutes->add_route('/article/:id');
	   $routes->mount('/admin/', $subroutes);

DESCRIPTION
       Routes::Tiny is a lightweight routes implementation.

       Routes::Tiny aims to be easy to use in any web framework.

FEATURES
   "Constraints"
	   $routes->add_route('/articles/:id', constraints => {id => qr/\d+/});

	   $match = $routes->match('/articles/1');  # Routes::Tiny::Match object
	   $match = $routes->match('/article/foo'); # undef

       It is possible to specify a constraint that a placeholder must match
       using a normal Perl regular expression.

       Constraints can be passed as array references:

	   $routes->add_route('/articles/:action',
	       constraints => {action => [qw/add update/]});

	   $match = $routes->match('/articles/add');	# Routes::Tiny::Match object
	   $match = $routes->match('/articles/delete');	# undef

   "Optional placeholders"
	   $routes->add_route('/admin/:service(/:action)?', defaults =>	{action	=> 'list'});

	   my $match = $routes->match('/admin/foo');
	   # $m->captures is {service => 'foo',	action => 'list'}

       It is possible to specify an optional placeholder with a	default	value.

   "Grouping"
	   $routes->add_route('/(:foo)-bar');

	   $match = $routes->match('/hello-bar');
	   # $match->captures is {foo => 'hello'}

       It is possible to create	a placeholder that doesn't occupy all the
       space between slashes.

   "Globbing"
	   $routes->add_route('/photos/*other');
	   $routes->add_route('/books/*section/:title');
	   $routes->add_route('/*a/foo/*b');

	   $match = $routes->match('photos/foo/bar/baz');
	   # $match->captures is {other	=> 'foo/bar/baz'}

	   $match = $routes->match('books/some/section/last-words-a-memoir');
	   # $match->captures is {section => 'some/section', title => 'last-words-a-memoir'}

	   $match = $routes->match('zoo/woo/foo/bar/baz');
	   # $match->captures is {a => 'zoo/woo', b => 'bar/baz'}

       It is possible to specify a globbing placeholder.

   "Passing arguments AS IS"
	   $routes->add_route('/', arguments =>	{one =>	'two'});

	   $match = $routes->match('/');
	   # $match->arguments is {one => 'two'}

       It is possible to pass arguments	to the match object AS IS.

   "Matching with methods"
	   # Exact HTTP	method definition
	   $routes->add_route('/articles', method => 'GET', defaults =>	{action	=> 'list'});

	   # Sweeter method definition
	   # METHOD => PATTERN should go as first parameters to	add_route()
	   $routes->add_route(PUT => '/articles', defaults => {action => 'create'});

	   $match = $routes->match('/articles',	method => 'GET');
	   # $m->captures is {action =>	'list'}

	   $match = $routes->match('/articles',	method => 'PUT');
	   # $m->captures is {action =>	'create'}

   "Subroutes"
	   $subroutes =	Routes::Tiny->new;
	   $subroutes->add_route('/articles/:id', name => 'admin-article');
	   $routes->mount('/admin/', $subroutes);

	   $match = $routes->match('/admin/articles/3/');
	   # $match->captures is {id =>	3}

       It is possible to capture params	in mount routes

	   $subroutes =	Routes::Tiny->new;
	   $subroutes->add_route('/comments/:page/', name => 'comments');
	   $routes->mount('/:type/:id/', $subroutes);

	   $match = $routes->match('/articles/3/comments/5/');
	   # $match->captures is {page => 5}
	   # $match->parent->captures is {type => 'articles', id => 3}

       Parent routes mounts names of children routes, so it's possible to buil
       path

	   $path = $routes->build_path('admin-article',	id => 123);
	   # $path is '/admin/articles/123'
	   $path = $routes->build_path('comments', type	=> 'articles', id => 123, page => 5);
	   # $path is '/articles/123/comments/5/'

   "Path building"
	   $routes->add_route('/articles/:id', name => 'article');

	   $path = $routes->build_path('article', id =>	123);
	   # $path is '/articles/123'

       It is possible to reconstruct a path from route's name and parameters.

WARNINGS
   "Trailing slash issue"
       Trailing	slash is important.

	   $routes->add_route('/articles');

	   # is	different from

	   $routes->add_route('/articles/');

       If you don't want this behaviour	pass "strict_trailing_slash" to	the
       constructor:

	   my $routes =	Routes::Tiny->new(strict_trailing_slash	=> 0);

   "Case sensitivity"
       Routes::Tiny is case sensitive by default (since	0.20).

       It means	that

	   $routes->add_route('/admin/');

       will NOT	match both "/admin/" and "/ADMIN/".

       If you don't want this behaviour	pass "strict_case" to the constructor:

	   my $routes =	Routes::Tiny->new(strict_case => 0);

METHODS
   "new"
	   my $routes =	Routes::Tiny->new;

   "add_route"
	   $routes->add_route('/:service/:action');

       Add a new route.

   "mount"
	   $routes->mount('/admin/', $subroutes)

       Includes	one Routes::Tiny instance into another with given prefix.

   "match"
	   $routes->match('/hello/world');

       Match against a path.

   "build_path"
	   $pattern->build_path('name',	{foo =>	'bar'});

       Build path from a given name and	params.

DEVELOPMENT
   Repository
	   http://github.com/vti/routes-tiny

CREDITS
       Sergey Zasenko (und3f)

       Roman Galeev (jamhed)

       Dmitry Smal (mialinx)

       Dinar (ziontab)

       Jonathan	R. Warden

       Alexander Batyrshin

       Konstantin Cherednichenko

AUTHOR
       Viacheslav Tykhanovskyi,	"vti@cpan.org".

COPYRIGHT AND LICENSE
       Copyright (C) 2011-2017,	Viacheslav Tykhanovskyi

       This program is free software, you can redistribute it and/or modify it
       under the terms of the Artistic License version 2.0.

perl v5.32.1			  2017-07-12		       Routes::Tiny(3)

NAME | SYNOPSIS | DESCRIPTION | FEATURES | WARNINGS | METHODS | DEVELOPMENT | CREDITS | AUTHOR | COPYRIGHT AND LICENSE

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=Routes::Tiny&sektion=3&manpath=FreeBSD+13.0-RELEASE+and+Ports>

home | help