Your Slim app’s routes and middleware are given a PSR 7 response object that represents the current HTTP response to be returned to the client. The response object implements the PSR 7 ResponseInterface with which you can inspect and manipulate the HTTP response status, headers, and body.
The PSR 7 response object is injected into your Slim application routes as the second argument to the route callback like this:
The PSR 7 response object is injected into your Slim application middleware as the second argument of the middleware callable like this:
Every HTTP response has a numeric status code. The status code
identifies the type of HTTP response to be returned to the client. The PSR 7
Response object’s default status code is
200 (OK). You can get the PSR 7
Response object’s status code with the
getStatusCode() method like this.
You can copy a PSR 7 Response object and assign a new status code like this:
Every HTTP response has headers. These are metadata that describe the HTTP response but are not visible in the response’s body. Slim’s PSR 7 Response object provides several methods to inspect and manipulate its headers.
You can fetch all HTTP response headers as an associative array with the PSR 7
getHeaders() method. The resultant associative array’s keys
are the header names and its values are themselves a numeric array of string
values for their respective header name.
You can get a single header’s value(s) with the PSR 7 Response object’s
getHeader($name) method. This returns an array of values for the given header
name. Remember, a single HTTP header may have more than one value!
You may also fetch a comma-separated string with all values for a given header
with the PSR 7 Response object’s
getHeaderLine($name) method. Unlike the
getHeader($name) method, this method returns a comma-separated string.
You can test for the presence of a header with the PSR 7 Response object’s
You can set a header value with the PSR 7 Response object’s
withHeader($name, $value) method.
You can append a header value with the PSR 7 Response object’s
withAddedHeader($name, $value) method.
withHeader()method, this method appends the new value to the set of values that already exist for the same header name. The Response object is immutable. This method returns a copy of the Response object that has the appended header value.
You can remove a header with the Response object’s
An HTTP response typically has a body. Slim provides a PSR 7 Response object with which you can inspect and manipulate the eventual HTTP response’s body.
Just like the PSR 7 Request object, the PSR 7 Response object implements
the body as an instance of
\Psr\Http\Message\StreamInterface. You can get
the HTTP response body
StreamInterface instance with the PSR 7 Response
getBody() method. The
getBody() method is preferable if the
outgoing HTTP response length is unknown or too large for available memory.
\Psr\Http\Message\StreamInterface instance provides the following
methods to read from, iterate, and write to its underlying PHP
getMetadata($key = null)
Most often, you’ll need to write to the PSR 7 Response object. You can write
content to the
StreamInterface instance with its
write() method like this:
You can also replace the PSR 7 Response object’s body with an entirely new
StreamInterface instance. This is particularly useful when you want to pipe
content from a remote destination (e.g. the filesystem or a remote API) into
the HTTP response. You can replace the PSR 7 Response object’s body with
withBody(StreamInterface $body) method. Its argument MUST be an
Slim’s Response object has a custom method
withJson($data, $status, $encodingOptions) to help simplify the process of returning JSON data.
$data parameter contains the data structure you wish returned as JSON.
$status is optional, and can be used to return a custom HTTP code.
$encodingOptions is optional, and are the same encoding options used for
In it’s simplest form, JSON data can be returned with a default 200 HTTP status code.
We can also return JSON data with a custom HTTP status code.
Content-Type of the Response is automatically set to