The Perl Advent Calendar needs more articles for 2022. Submit your idea today!
NAME

    Spike-2.0 - Simple Plack::Request-based web framework

SYNOPSIS

 Quick start

    1. Install Spike package

    2. spike add MySite

    3. cd MySite

    4. rm -r web/mysite

    5. ln -s /path/to/web/static/files web/mysite

    6. plackup script/mysite.psgi

 Simple site

  startup.psgi

        use FindBin;
        use lib "$FindBin::Bin/../lib";
    
        use DeadBeef::Site;
    
        DeadBeef::Site->run;

  DeadBeef::Site

        package DeadBeef::Site;
    
        use base qw(Spike);
    
        sub startup {
            my $self = shift;
    
            $self->route
                ->prepare(sub {
                    my ($req, $res) = @_;
                    # place code here
                })
                ->finalize(sub {
                    my ($req, $res) = @_;
                    # place code here
                })
                ->error(404 => sub {
                    my ($req, $res) = @_;
                    # place code here
                })
                ->error(500 => sub {
                    my ($req, $res) = @_;
                    # place code here
                })
                ->get('/' => sub {
                    my ($req, $res) = @_;
                    # place code here
                })
                ->post('/' => sub {
                    my ($req, $res) = @_;
                    # place code here
                });
        }
    
        1;

 Routes and handlers

        $new_route = $route->route('level1')
        $new_route = $route->route('level1/level2/...')
        $new_route = $route->route('*')
        $new_route = $route->route('#name')
        $new_route = $route->route('#name' => [qw(value1 value2 ...)])
        $new_route = $route->route('#name' => qr/regexp/ })
        $new_route = $route->route('#name' => sub { ... })
    
        # all of the above together
        $new_route = $route->route('l1/#n1/l3' => sub { ... })
            ->route('*/#n2/l6' => sub { ... })
    
        $route = $route->get(sub { ... })
        $route = $route->get('path' => sub { ... })
        $route = $route->post(sub { ... })
        $route = $route->post('path' => sub { ... })
        $route = $route->all(sub { ... })
        $route = $route->all('path' => sub { ... })
    
        $route = $route->error(sub { ... })
        $route = $route->error(404 => sub { ... })
        $route = $route->error(Spike::Error::Class => sub { ... })
    
        $route = $route->prepare(sub { ... })
        $route = $route->finalize(sub { ... })

SEE ALSO

    Plack, Plack::Request, Plack::Response

AUTHOR

    Aleksandr Aleshin <silencer2k@gmail.com>

COPYRIGHT

    Copyright (c) 2016 Aleksandr Aleshin

LICENSE

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.