NAME¶
Plack::Component - Base class for PSGI endpoints
SYNOPSIS¶
package Plack::App::Foo;
use parent qw( Plack::Component );
sub call {
my($self, $env) = @_;
# Do something with $env
my $res = ...; # create a response ...
# return the response
return $res;
}
DESCRIPTION¶
Plack::Component is the base class shared between Plack::Middleware and
Plack::App::* modules. If you are writing middleware, you should inherit from
Plack::Middleware, but if you are writing a Plack::App::* you should inherit
from this directly.
REQUIRED METHOD¶
- call ($env)
- You are expected to implement a "call" method in
your component. This is where all the work gets done. It receives the PSGI
$env hash-ref as an argument and is expected to return a proper PSGI
response value.
METHODS¶
- new (%opts | \%opts)
- The constructor accepts either a hash or a hash-ref and
uses that to create the instance with. It will call no other methods and
simply return the instance that is created.
- prepare_app
- This method is called by "to_app" and is meant as
a hook to be used to prepare your component before it is packaged as a
PSGI $app.
- to_app
- This is the method used in several parts of the Plack
infrastructure to convert your component into a PSGI $app. You should not
ever need to override this method, it is recommended to use
"prepare_app" and "call" instead.
- response_cb
- This is a wrapper for "response_cb" in
Plack::Util. See "RESPONSE CALLBACK" in Plack::Middleware for
details.
OBJECT LIFECYCLE¶
Objects for the derived classes (Plack::App::* or Plack::Middleware::*) are
created at the PSGI application compile phase using "new",
"prepare_app" and "to_app", and the created object
persists during the web server lifecycle, unless it is running on the
non-persistent environment like CGI. "call" is invoked against the
same object whenever a new request comes in.
You can check if it is running in a persistent environment by checking
"psgi.run_once" key in the $env being true (non-persistent) or false
(persistent), but it is best for you to write your middleware safely for a
persistent environment. To accomplish that, you should avoid saving
per-request data like $env in your object.
BACKWARDS COMPATIBILITY¶
The Plack::Middleware module used to inherit from Class::Accessor::Fast, which
has been removed in favor of the Plack::Util::Accessor module. When developing
new components it is recommended to use Plack::Util::Accessor like so:
use Plack::Util::Accessor qw( foo bar baz );
However, in order to keep backwards compatibility this module provides a
"mk_accessors" method similar to Class::Accessor::Fast. New code
should not use this and use Plack::Util::Accessor instead.
SEE ALSO¶
Plack Plack::Builder Plack::Middleware