NAME

Kelp::Request - Request class for a Kelp application

SYNOPSIS

my $request = Kelp::Request( app => $app, env => $env );

DESCRIPTION

This module provides a convenience layer on top of Plack::Request. It extends it to add several convenience methods.

ATTRIBUTES

app

A reference to the Kelp application.

stash

Returns a hashref, which represents the stash of the current the request

An all use, utility hash to use to pass information between routes. The stash is a concept originally conceived by the developers of Catalyst. It's a hash that you can use to pass data from one route to another.

# put value into stash
$self->req->stash->{username} = app->authenticate();
# more convenient way
$self->stash->{username} = app->authenticate();

# get value from stash
return "Hello " . $self->req->stash->{username};
# more convenient way
return "Hello " . $self->stash('username');

named

This hash is initialized with the named placeholders of the path that the current route is processing.

param

Returns the HTTP parameters of the request. This method delegates all the work to "param" in Plack::Request, except when the content type of the request is application/json. In that case, it will decode the JSON body and return as follows:

  • If no arguments are passed, then it will return the names of the HTTP parameters when called in array contest, and a reference to the entire JSON hash when called in scalar context.

    # JSON body = { bar => 1, foo => 2 }
    my @names = $self->param;   # @names = ('bar', 'foo')
    my $json = $self->param;    # $json = { bar => 1, foo => 2 }
  • If a single argument is passed, then the corresponding value in the JSON document is returned.

    my $bar = $self->param('bar');  # $bar = 1

address, remote_host, user

These are shortcuts to the REMOTE_ADDR, REMOTE_HOST and REMOTE_USER environment variables.

if ( $self->req->address eq '127.0.0.1' ) {
    ...
}

Note. If you're running the web app behind nginx (or another web server), you need to use Plack::Middleware::ReverseProxy.

# app.psgi

builder {
    enable_if { ! $_[0]->{REMOTE_ADDR} || $_[0]->{REMOTE_ADDR} =~ /127\.0\.0\.1/ }
    "Plack::Middleware::ReverseProxy";
    $app->run;
};

(REMOTE_ADDR is not set at all when using the proxy via filesocket).

session

Returns the Plack session hash or dies if no Session middleware was included.

sub get_session_value {
    my $self = shift;
    $self->session->{user} = 45;
}

If called with a single argument, returns that value from the session hash:

sub set_session_value {
    my $self = shift;
    my $user = $self->req->session('user');
    # Same as $self->req->session->{'user'};
}

Set values in the session using key-value pairs:

sub set_session_hash {
    my $self = shift;
    $self->req->session(
        name  => 'Jill Andrews',
        age   => 24,
        email => 'jill@perlkelp.com'
    );
}

Set values using a Hashref:

sub set_session_hashref {
    my $self = shift;
    $self->req->session( { bar => 'foo' } );
}

Clear the session:

sub clear_session {
    my $self = shift;
    $self->req->session( {} );
}

Common tasks with sessions

Initialize file sessions

In your config file:

middleware => ['Session'],
middleware_init => {
    Session => {
        store => 'File'
    }
}
Delete session value
delete $self->req->session->{'useless'};
Remove all session values
$self->req->session( {} );

is_ajax

Returns true if the request was called with XMLHttpRequest.

is_json

Returns true if the request's content type was application/json.