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

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

:foo matches qr{[^/]}. 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();
        }
    }

SEE ALSO

Amon2