diff --git a/CHANGELOG.md b/CHANGELOG.md index ab7a8ce..dc0b33d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,11 +2,14 @@ ## Unreleased +### Added + +- The FullHttpMessageFormatter was added + ### Fixed - #41: Response builder broke header value - ## 1.2.0 - 2016-03-29 ### Added diff --git a/src/Formatter/FullHttpMessageFormatter.php b/src/Formatter/FullHttpMessageFormatter.php new file mode 100644 index 0000000..0afe38c --- /dev/null +++ b/src/Formatter/FullHttpMessageFormatter.php @@ -0,0 +1,72 @@ + + */ +class FullHttpMessageFormatter implements Formatter +{ + /** + * The maximum length of the body. + * + * @var int + */ + private $maxBodyLength; + + /** + * @param int $maxBodyLength + */ + public function __construct($maxBodyLength = 1000) + { + $this->maxBodyLength = $maxBodyLength; + } + + /** + * {@inheritdoc} + */ + public function formatRequest(RequestInterface $request) + { + $message = sprintf( + "%s %s HTTP/%s\n", + $request->getMethod(), + $request->getRequestTarget(), + $request->getProtocolVersion() + ); + + foreach ($request->getHeaders() as $name => $values) { + $message .= $name.': '.implode(', ', $values)."\n"; + } + + $message .= "\n".mb_substr($request->getBody()->__toString(), 0, $this->maxBodyLength); + + return $message; + } + + /** + * {@inheritdoc} + */ + public function formatResponse(ResponseInterface $response) + { + $message = sprintf( + "HTTP/%s %s %s\n", + $response->getProtocolVersion(), + $response->getStatusCode(), + $response->getReasonPhrase() + ); + + foreach ($response->getHeaders() as $name => $values) { + $message .= $name.': '.implode(', ', $values)."\n"; + } + + $message .= "\n".mb_substr($response->getBody()->__toString(), 0, $this->maxBodyLength); + + return $message; + } +}