Skip to content

Commit d9c266f

Browse files
author
Florian Krämer
committed
Using the response factory for the validation handler
1 parent 10b4520 commit d9c266f

File tree

2 files changed

+17
-13
lines changed

2 files changed

+17
-13
lines changed

src/HttpExceptionToProblemDetailsKernelListener.php

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace Phauthentic\Symfony\ProblemDetails;
66

7-
use Symfony\Component\HttpFoundation\JsonResponse;
7+
use Symfony\Component\HttpFoundation\Response;
88
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
99
use Symfony\Component\HttpKernel\Exception\HttpException;
1010
use Throwable;
@@ -26,6 +26,11 @@
2626
*/
2727
class HttpExceptionToProblemDetailsKernelListener
2828
{
29+
public function __construct(
30+
protected ProblemDetailsFactoryInterface $problemDetailsFactory
31+
) {
32+
}
33+
2934
public function onKernelException(ExceptionEvent $event): void
3035
{
3136
$exception = $event->getThrowable();
@@ -41,18 +46,12 @@ private function isAHttpException(Throwable $exception): bool
4146
return $exception instanceof HttpException;
4247
}
4348

44-
private function buildResponse(HttpException $httpException): JsonResponse
49+
private function buildResponse(HttpException $httpException): Response
4550
{
46-
return new JsonResponse(
47-
data: [
48-
'type' => 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/' . $httpException->getStatusCode(),
49-
'title' => $httpException->getMessage(),
50-
'status' => $httpException->getStatusCode(),
51-
],
51+
return $this->problemDetailsFactory->createResponse(
5252
status: $httpException->getStatusCode(),
53-
headers: [
54-
'Content-Type' => 'application/problem+json',
55-
]
53+
type: 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/' . $httpException->getStatusCode(),
54+
title: $httpException->getMessage()
5655
);
5756
}
5857
}

tests/Unit/HttpExceptionToProblemDetailsKernelListenerTest.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Phauthentic\Symfony\ProblemDetails\Tests\Unit;
66

77
use Exception;
8+
use Phauthentic\Symfony\ProblemDetails\ProblemDetailsFactory;
89
use PHPUnit\Framework\TestCase;
910
use Phauthentic\Symfony\ProblemDetails\HttpExceptionToProblemDetailsKernelListener;
1011
use Symfony\Component\HttpFoundation\JsonResponse;
@@ -27,7 +28,9 @@ public function testOnKernelExceptionWithHttpException(): void
2728
server: ['HTTP_ACCEPT' => 'application/json']
2829
);
2930
$event = new ExceptionEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST, $exception);
30-
$listener = new HttpExceptionToProblemDetailsKernelListener();
31+
$listener = new HttpExceptionToProblemDetailsKernelListener(
32+
new ProblemDetailsFactory()
33+
);
3134

3235
// Act
3336
$listener->onKernelException($event);
@@ -55,7 +58,9 @@ public function testOnKernelExceptionWithNonHttpException(): void
5558
server: ['HTTP_ACCEPT' => 'application/json']
5659
);
5760
$event = new ExceptionEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST, $exception);
58-
$listener = new HttpExceptionToProblemDetailsKernelListener();
61+
$listener = new HttpExceptionToProblemDetailsKernelListener(
62+
new ProblemDetailsFactory()
63+
);
5964

6065
// Act
6166
$listener->onKernelException($event);

0 commit comments

Comments
 (0)