Router::Simple::Cookbook(3pm) | User Contributed Perl Documentation | Router::Simple::Cookbook(3pm) |
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
2015-04-13 | perl v5.40.0 |