PSR7和值对象
Slim
的 Request
和 Response
对象支持PSR7接口。Slim
可以灵活的使用任何 PSR7
的实现。比如,一个 Slim 的应用,__不必要求只能__返回一个 \Slim\Http\Response
的实现。它可以返回一个 \GuzzleHttp\Psr7\CachingStream
的实例 或者 \GuzzleHttp\Psr7\stream_for()
的实现函数。
Slim
提供了它自己 PSR7 的实现。但是,你可以很容易的使用第三方实现去替换它默认的 PSR7 对象。只要你分别使用 \Psr\Http\Message\ServerRequestInterface
和 \Psr\Http\Message\ResponseInterface
接口的实现重写应用容器中的 request
和 response
服务。
值对象
Slim
的请求对象(Request
)跟响应对象(Response
)是一个不可改变的值对象(immutable value objects)。如果要改变它们只能通过克隆一个版本去修改。当你需要改变值对象的时候,因为需要克隆个对象,会产生一定的开销。但是通过正确的方式去改变,并不会影响性能。
你可以通过调用 PSR7的方法(通常都带 with
前缀)去复制一个值对象。比如,一个响应对象(Response
)的 withHeader($name, $value)
方法会返回一个克隆的新的 HTTP 请求头值对象。
<?php
$app = new \Slim\App;
$app->get('/foo', function ($req, $res, $args) {
return $res->withHeader(
'Content-Type',
'application/json'
);
});
$app->run();
下面是一些 PSR7 接口提供的可以改变请求对象(Request
)跟响应对象(Response
)的方法:
* withProtocolVersion($version)
* withHeader($name, $value)
* withAddedHeader($name, $value)
* withoutHeader($name)
* withBody(StreamInterface $body)
下面是一些 PSR7 接口提供的可以改变请求对象(Request
)的方法:
* withMethod($method)
* withUri(UriInterface $uri, $preserveHost = false)
* withCookieParams(array $cookies)
* withQueryParams(array $query)
* withUploadedFiles(array $uploadedFiles)
* withParsedBody($data)
* withAttribute($name, $value)
* withoutAttribute($name)
下面是一些 PSR7 接口提供的可以改变响应对象(Response
)的方法:
- withStatus($code, $reasonPhrase = ‘’)
英文好的可以通过 PSR7 文档 了解更多详细信息。
文档翻译的并不是很专业,仅供个人学习作用,建议看官方文档。
如有兴趣,请看下一篇 SLIM 3 文档(五)-中间件