NAME
Router::Simple::Cookbook - The Router::Simple Cookbook
FAQ
How to create Sinatra-ish framework with Router::Simple?
Please read the following example code.
package MySinatraish;use Router::Simple;use Plack::Request;sub import {my $pkg = caller(0);my $router = Router::Simple->new();my $any = sub ($$;$) {my ($pattern, $dest, $opt) = do {if (@_ == 3) {my ($methods, $pattern, $code) = @_;($pattern, {code => $code}, +{method => [ map { uc $_ } @$methods ]});} else {my ($pattern, $code) = @_;($pattern, {code => $code}, +{});}};$router->connect($pattern,$dest,$opt,);};no strict 'refs';# any [qw/get post delete/] => '/bye' => sub { ... };# any '/bye' => sub { ... };*{"${pkg}::any"} = $any;*{"${pkg}::get"} = sub {$any->([qw/GET HEAD/], $_[0], $_[1]);};*{"${pkg}::post"} = sub {$any->([qw/POST/], $_[0], $_[1]);};*{"${pkg}::as_psgi_app"} = sub {return sub {if (my $p = $router->match($_[0])) {[200, [], [$p->{code}->()]];} else {[404, [], ['not found']];}}};}package MyApp;use MySinatraish;get '/' => sub {'top';};post '/new' => sub {'posted';};as_psgi_app;
How to switch from HTTPx::Dispatcher?
HTTPx::Dispatcher is class specific declarative router.
package MyApp::Dispatcher;use HTTPx::Dispatcher;connect '/', {controller => 'foo', action => 'bar'};1;
The following script is same as above.
package MyApp::Dispatcher;use Router::Simple::Declare;my $router = router {connect '/', {controller => 'foo', action => 'bar'};};sub match { $router->match() }
How to use Router::Simple with non-strictly-MVC application?
use Router::Simple::Declare;my $router = router {connect '/foo/bar/' => { 'target' => '/foobar.asp' };connect '/topics/:topic' => { target => '/my-topic.asp' };connect '/products/{Category:.*}' => { target => '/products.asp', Category => 'All' };connect '/zipcode/{zip:[0-9]{5,5}}' => {target => '/zipcode.asp' };};
You can pass the target path as destination.
AUTHOR
Tokuhiro Matsuno <tokuhirom AAJKLFJEF GMAIL COM>
LICENSE
Copyright (C) Tokuhiro Matsuno
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
SEE ALSO
Router::Simple