From 44c5d9d727f832533f6ed5e97fc6e6957a85d9c2 Mon Sep 17 00:00:00 2001 From: Sebastian Almberg <83243306+Sebbeben@users.noreply.github.com> Date: Sun, 8 Feb 2026 15:35:49 +0100 Subject: [PATCH] Use Symfony's built-in ETag handling for HTTP caching Replace manual If-None-Match comparison with Response::setEtag() and Response::isNotModified(), which properly handles ETag quoting, weak vs strong comparison, and 304 response cleanup. Fixes PHPStan return type error and CI test failures. --- src/Controller/KiCadApiController.php | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/Controller/KiCadApiController.php b/src/Controller/KiCadApiController.php index a5d5eecd..70ba7786 100644 --- a/src/Controller/KiCadApiController.php +++ b/src/Controller/KiCadApiController.php @@ -92,17 +92,12 @@ class KiCadApiController extends AbstractController * Creates a JSON response with HTTP cache headers (ETag and Cache-Control). * Returns 304 Not Modified if the client's ETag matches. */ - private function createCachedJsonResponse(Request $request, array $data, int $maxAge): JsonResponse + private function createCachedJsonResponse(Request $request, array $data, int $maxAge): Response { - $etag = '"' . md5(json_encode($data)) . '"'; - - if ($request->headers->get('If-None-Match') === $etag) { - return new Response('', Response::HTTP_NOT_MODIFIED); - } - $response = new JsonResponse($data); + $response->setEtag(md5(json_encode($data))); $response->headers->set('Cache-Control', 'private, max-age=' . $maxAge); - $response->headers->set('ETag', $etag); + $response->isNotModified($request); return $response; }