NAME
Amon2::Web::Dispatcher::RouterBoom - Router::Boom bindings
SYNOPSIS
package MyApp2::Web::Dispatcher;
use Amon2::Web::Dispatcher::RouterBoom;
use MyApp::Web::C::Foo;
base 'MyApp::Web::C';
get '/' => 'Foo#bar';
1;
DESCRIPTION
This is a router class for Amon2. It's based on Router::Boom.
DSL FUNCTIONS
get($path:Str, $destnation:Str)post($path:Str, $destnation:Str)put($path:Str, $destnation:Str)delete_($path:Str, $destnation:Str)any($path:Str, $destnation:Str)-
get '/' => 'Root#index'; get '/:user' => 'User#show'; any '/:user/update' => 'User#update'; post '/:user/blog/post' => 'Blog#post'; put '/:user/blog/put' => 'Blog#put'; delete_ '/:user/blog/:id' => 'Blog#remove';Add routes by DSL. First argument is the path pattern in Path::Boom rules. Second argument is the destination method path.
Destination method pass is
${class}#${method}form.The path declared with get() accepts GET and HEAD. The path declared with post() accepts POST method. The path declared with put() accepts PUT method. The path declared with delete_() accepts DELETE method. The path declared with any() accepts any methods.
base($klass:Str)-
base 'My::App::Web::C';You can specify the base class name for 'Root#index' style definition.
If you are write your dispatcher in following code, then the method for '/' is
My::App::Web::C::Root->index.base 'My::App::Web::C'; get '/' => 'Root#index'; get($path:Str, $destnation:CodeRef)post($path:Str, $destnation:CodeRef)put($path:Str, $destnation:CodeRef)delete_($path:Str, $destnation:CodeRef)any($path:Str, $destnation:CodeRef)-
get '/' => sub { my ($c) = @_; ... }; get '/:user' => sub { my ($c, $args) = @_; $c->render( 'user.tx' => { user => $args->{user}, }, ); };Add routes by DSL. First argument is the path pattern in Path::Boom rules. Second argument is the destination code.
Callback function's first argument is the context object. Second is the captured values from the router.
ROUTING RULES
Router::Boom's routing rule is really flexible. You can embed regexp in your rule.
/foo/bar-
String literal matches strings.
/:foo-
:foomatchesqr{[^/]}. It's captured. /{foo}-
{foo}is same as:foo. /{foo:.*}-
You can use the custom regexp for capturing.
/*-
*is same as{*:.*}.
EXCEPTION HANDLER
You can customize the exception handler. You can define the special named method 'handle_exception'.
package MyApp::Web::Dispatcher;
sub handle_exception {
my ($class, $c, $e) = @_;
if (UNIVERSAL::isa($e, 'My::Exception::Validation')) {
return $c->create_simple_status_page(400, 'Bad Request');
} else {
return $c->res_500();
}
}