Slim的 Request 和 Response 对象支持PSR-7接口。这使得 Slim 非常灵活,因为它可以使用任何PSR-7 实现。例如,您可以返回
函数GuzzleHttp\Psr7\CachingStream
返回的一个实例或任何实例GuzzleHttp\Psr7\stream_for()
。
Slim 提供了自己的 PSR-7 实现。但是,您可以自由 安装第三方实现。
Request 和 Response 对象是不可变的值对象。它们只能通过请求具有更新属性值的克隆版本来“更改”。值对象具有名义上的开销,因为在更新其属性时必须克隆它们。此开销不会以任何有意义的方式影响性能。
with
您可以通过调用其任何 PSR-7 接口方法(这些方法通常具有前缀)来请求值对象的副本。例如,PSR-7 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 接口提供了这些方法来转换 Request 和 Response 对象:
withProtocolVersion($version)
withHeader($name, $value)
withAddedHeader($name, $value)
withoutHeader($name)
withBody(StreamInterface $body)
PSR-7 接口提供了这些方法来转换 Request 对象:
withMethod($method)
withUri(UriInterface $uri, $preserveHost = false)
withCookieParams(array $cookies)
withQueryParams(array $query)
withUploadedFiles(array $uploadedFiles)
withParsedBody($data)
withAttribute($name, $value)
withoutAttribute($name)
PSR-7 接口提供了这些方法来转换 Response 对象:
withStatus($code, $reasonPhrase = '')
有关这些方法的更多信息,请参阅PSR-7 文档。