File tree Expand file tree Collapse file tree 2 files changed +59
-0
lines changed
Expand file tree Collapse file tree 2 files changed +59
-0
lines changed Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments