Skip to content

Commit ddc8e96

Browse files
committed
Pass request to callable value in ExceptionResponder middleware
1 parent 6797c61 commit ddc8e96

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-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: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55
namespace Yiisoft\ErrorHandler\Tests\Middleware;
66

77
use DomainException;
8+
use HttpSoft\Message\Request;
89
use HttpSoft\Message\Response;
910
use HttpSoft\Message\ResponseFactory;
1011
use HttpSoft\Message\ResponseTrait;
12+
use HttpSoft\Message\ServerRequest;
1113
use HttpSoft\Message\ServerRequestFactory;
1214
use InvalidArgumentException;
1315
use LogicException;
@@ -41,18 +43,26 @@ public function testCode(): void
4143

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

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

5868
public function testAnotherException(): void

0 commit comments

Comments
 (0)