---
name: "Plack::Component"
section: "3pm"
platform: "linux"
package: "libplack-perl"
version: "1.0051-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Plack::Component"
---

# Plack::Component(3pm)

Base class for PSGI endpoints

## 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 hashref and uses that to create the instance. 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
