Skip to content
This repository was archived by the owner on Jan 29, 2020. It is now read-only.

Commit 96f8006

Browse files
committed
Merge pull request #480 from snapshotpl/forwarded_method_in_head_request
Forwarded method flag in head request
2 parents 8833877 + 2451ebf commit 96f8006

File tree

2 files changed

+18
-17
lines changed

2 files changed

+18
-17
lines changed

src/Middleware/ImplicitHeadMiddleware.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
*/
4444
class ImplicitHeadMiddleware implements ServerMiddlewareInterface
4545
{
46+
const FORWARDED_HTTP_METHOD_ATTRIBUTE = 'forwarded_http_method';
47+
4648
/**
4749
* @var null|ResponseInterface
4850
*/
@@ -89,7 +91,9 @@ public function process(ServerRequestInterface $request, DelegateInterface $dele
8991
}
9092

9193
$response = $delegate->process(
92-
$request->withMethod(RequestMethod::METHOD_GET)
94+
$request
95+
->withMethod(RequestMethod::METHOD_GET)
96+
->withAttribute(self::FORWARDED_HTTP_METHOD_ATTRIBUTE, RequestMethod::METHOD_HEAD)
9397
);
9498

9599
return $response->withBody(new Stream('php://temp/', 'wb+'));

test/Middleware/ImplicitHeadMiddlewareTest.php

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
use Prophecy\Argument;
1515
use Psr\Http\Message\ResponseInterface;
1616
use Psr\Http\Message\ServerRequestInterface;
17-
use Psr\Http\Message\StreamInterface;
1817
use Zend\Diactoros\Response;
18+
use Zend\Diactoros\ServerRequest;
1919
use Zend\Expressive\Middleware\ImplicitHeadMiddleware;
2020
use Zend\Expressive\Router\Route;
2121
use Zend\Expressive\Router\RouteResult;
@@ -162,26 +162,23 @@ public function testInvokesNextWhenRouteImplicitlySupportsHeadAndSupportsGet()
162162
$result = $this->prophesize(RouteResult::class);
163163
$result->getMatchedRoute()->will([$route, 'reveal']);
164164

165-
$request = $this->prophesize(ServerRequestInterface::class);
166-
$request->getMethod()->willReturn(RequestMethod::METHOD_HEAD);
167-
$request->getAttribute(RouteResult::class, false)->will([$result, 'reveal']);
168-
$request->withMethod(RequestMethod::METHOD_GET)->will([$request, 'reveal']);
165+
$request = (new ServerRequest([], [], null, RequestMethod::METHOD_HEAD))
166+
->withAttribute(RouteResult::class, $result->reveal());
169167

170-
$response = $this->prophesize(ResponseInterface::class);
171-
$response
172-
->withBody(Argument::that(function ($body) {
173-
$this->assertInstanceOf(StreamInterface::class, $body);
174-
$this->assertEquals('', (string) $body);
175-
return true;
176-
}))
177-
->will([$response, 'reveal']);
168+
$response = new Response\JsonResponse(['some_data' => true], 400);
178169

179170
$delegate = $this->prophesize(DelegateInterface::class);
180-
$delegate->process($request->reveal())->will([$response, 'reveal']);
171+
$delegate->process(Argument::that(function (ServerRequestInterface $request) {
172+
$attr = $request->getAttribute(ImplicitHeadMiddleware::FORWARDED_HTTP_METHOD_ATTRIBUTE);
173+
$this->assertSame('HEAD', $attr);
174+
return true;
175+
}))->willReturn($response);
181176

182177
$middleware = new ImplicitHeadMiddleware();
183-
$result = $middleware->process($request->reveal(), $delegate->reveal());
178+
$result = $middleware->process($request, $delegate->reveal());
184179

185-
$this->assertSame($response->reveal(), $result);
180+
$this->assertSame(400, $result->getStatusCode());
181+
$this->assertSame('', (string) $result->getBody());
182+
$this->assertSame('application/json', $result->getHeaderLine('content-type'));
186183
}
187184
}

0 commit comments

Comments
 (0)