Skip to content

Commit 9c8a6df

Browse files
authored
Pass request to callable value in ExceptionResponder middleware (#156)
1 parent 6797c61 commit 9c8a6df

File tree

3 files changed

+22
-10
lines changed

3 files changed

+22
-10
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## 4.2.1 under development
44

5-
- no changes in this release.
5+
- New #156: Pass request to callable value in `ExceptionResponder` middleware (@vjik)
66

77
## 4.2.0 August 19, 2025
88

src/Middleware/ExceptionResponder.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,10 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
7878

7979
if (is_callable($responseHandler)) {
8080
/** @var ResponseInterface */
81-
return $this->injector->invoke($responseHandler, ['exception' => $t]);
81+
return $this->injector->invoke($responseHandler, [
82+
'exception' => $t,
83+
'request' => $request,
84+
]);
8285
}
8386
}
8487
}

tests/Middleware/ExceptionResponderTest.php

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use HttpSoft\Message\Response;
99
use HttpSoft\Message\ResponseFactory;
1010
use HttpSoft\Message\ResponseTrait;
11+
use HttpSoft\Message\ServerRequest;
1112
use HttpSoft\Message\ServerRequestFactory;
1213
use InvalidArgumentException;
1314
use LogicException;
@@ -41,18 +42,26 @@ public function testCode(): void
4142

4243
public function testCallable(): void
4344
{
45+
$request = new ServerRequest(headers: ['X-TEST' => ['HELLO']]);
4446
$middleware = $this->createMiddleware([
45-
DomainException::class => function (ResponseFactoryInterface $responseFactory) {
46-
return $responseFactory->createResponse(Status::CREATED);
47-
},
47+
DomainException::class =>
48+
static function (ResponseFactoryInterface $responseFactory, ServerRequestInterface $request) {
49+
return $responseFactory->createResponse(Status::CREATED, $request->getHeaderLine('X-TEST'));
50+
},
4851
]);
4952

50-
$this->assertSame(
51-
Status::CREATED,
52-
$this
53-
->process($middleware)
54-
->getStatusCode(),
53+
$response = $middleware->process(
54+
$request,
55+
new class () implements RequestHandlerInterface {
56+
public function handle(ServerRequestInterface $request): ResponseInterface
57+
{
58+
throw new DomainException();
59+
}
60+
},
5561
);
62+
63+
$this->assertSame(Status::CREATED, $response->getStatusCode());
64+
$this->assertSame('HELLO', $response->getReasonPhrase());
5665
}
5766

5867
public function testAnotherException(): void

0 commit comments

Comments
 (0)