Slim поддерживает интерфейс PSR-7 для объектов запроса и ответа.
Это делает Slim гибче, потому что он может использовать любую реализацию PSR-7.
Например, вы можете вернуть экземпляр GuzzleHttp\Psr7\CachingStream или любой другой объект,
возвращаемый функцией GuzzleHttp\Psr7\stream_for().
Slim предоставляет собственную реализацию PSR-7, поэтому он работает "из коробки". Тем не менее,
вы можете заменить стандартные объекты PSR-7 сторонней реализацией.
Просто переопределите сервисы request и response в контейнере приложения, чтобы они возвращали
экземпляр Psr\Http\Message\ServerRequestInterface и Psr\Http\Message\ResponseInterface соответственно.
Объекты Request и Response являются неизменяемыми объектами-значениями.
Их можно "изменить", только клонировав версию с обновленными значениями свойств.
Эти объекты имеют номинальные издержки, но эти издержки никак не влияют на производительность.
Вы можете запросить копию объекта-значения, вызвав любой из его методов интерфейса PSR-7
(обычно эти методы имеют префикс with). Например, у объекта Response есть метод withHeader($name, $value),
который возвращает клонированный объект значения с новым заголовком HTTP.
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
require __DIR__ . '/../vendor/autoload.php';
$app = AppFactory::create();
$app->get('/foo', function (Request $request, Response $response, array $args) {
$payload = json_encode(['hello' => 'world'], JSON_PRETTY_PRINT);
$response->getBody()->write($payload);
return $response->withHeader('Content-Type', 'application/json');
});
$app->run();Интерфейс PSR-7 предоставляет следующие методы для преобразования объектов запроса и ответа:
withProtocolVersion($version)withHeader($name, $value)withAddedHeader($name, $value)withoutHeader($name)withBody(StreamInterface $body)Помимо общих, интерфейс запроса имеет следующие методы:
withMethod($method)withUri(UriInterface $uri, $preserveHost = false)withCookieParams(array $cookies)withQueryParams(array $query)withUploadedFiles(array $uploadedFiles)withParsedBody($data)withAttribute($name, $value)withoutAttribute($name)Интерфейс ответа, помимо общих, имеет методы:
withStatus($code, $reasonPhrase = '')Обратитесь к [документации PSR-7] (http://www.php-fig.org/psr/psr-7/) для получения дополнительной информации об этих методах.