Skip to content

Commit a04e42a

Browse files
committed
Add ContentLengthMiddleware
1 parent 30cf4f7 commit a04e42a

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace HttpSoft\Basis\Middleware;
6+
7+
use Psr\Http\Message\ResponseInterface;
8+
use Psr\Http\Message\ServerRequestInterface;
9+
use Psr\Http\Server\MiddlewareInterface;
10+
use Psr\Http\Server\RequestHandlerInterface;
11+
12+
final class ContentLengthMiddleware implements MiddlewareInterface
13+
{
14+
/**
15+
* {@inheritDoc}
16+
*/
17+
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
18+
{
19+
$response = $handler->handle($request);
20+
$size = $response->getBody()->getSize();
21+
22+
if ($size !== null && !$response->hasHeader('content-length')) {
23+
$response = $response->withHeader('content-length', (string) $size);
24+
}
25+
26+
return $response;
27+
}
28+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace HttpSoft\Tests\Basis\Middleware;
6+
7+
use HttpSoft\Basis\Middleware\ContentLengthMiddleware;
8+
use HttpSoft\Message\Response;
9+
use HttpSoft\Message\ServerRequest;
10+
use PHPUnit\Framework\TestCase;
11+
use Psr\Http\Message\ResponseInterface;
12+
use Psr\Http\Message\ServerRequestInterface;
13+
use Psr\Http\Server\RequestHandlerInterface;
14+
15+
class ContentLengthMiddlewareTest extends TestCase
16+
{
17+
public function testProcess(): void
18+
{
19+
$middleware = new ContentLengthMiddleware();
20+
$response = $middleware->process(new ServerRequest(), new class implements RequestHandlerInterface {
21+
public function handle(ServerRequestInterface $request): ResponseInterface
22+
{
23+
$response = new Response();
24+
$response->getBody()->write('Content');
25+
return $response;
26+
}
27+
});
28+
$this->assertSame(7, $response->getBody()->getSize());
29+
$this->assertSame('7', $response->getHeaderLine('content-length'));
30+
}
31+
}

0 commit comments

Comments
 (0)