Slim supports PSR-7 interfaces for
its Request and Response objects. This makes Slim flexible because it can
use any PSR-7 implementation. For example, a Slim application
route does not have to return an instance of
\Slim\Http\Response. It could,
for example, return an instance of
\GuzzleHttp\Psr7\CachingStream or any instance
returned by the
Slim provides its own PSR-7 implementation so that it works out of the box. However,
you are free to replace Slim’s default PSR 7 objects with a third-party implementation.
Just override the application container’s
response services so
they return an instance of
Slim’s Request and Response objects are immutable value objects. They can be “changed” only by requesting a cloned version that has updated property values. Value objects have a nominal overhead because they must be cloned when their properties are updated. This overhead does not affect performance in any meaningful way.
You can request a copy of a value object by invoking any of its PSR 7
interface methods (these methods typically have a
with prefix). For example,
a PSR 7 Response object has a
withHeader($name, $value) method that returns a
cloned value object with the new HTTP header.
The PSR 7 interface provides these methods to transform Request and Response objects:
The PSR 7 interface provides these methods to transform Request objects:
withUri(UriInterface $uri, $preserveHost = false)
The PSR 7 interface provides these methods to transform Response objects:
withStatus($code, $reasonPhrase = '')
Refer to the PSR-7 documentation for more information about these methods.