|null $decoded */
+ $decoded = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
+ $data = $decoded;
+ } catch (\Throwable $e) {
+ return $this->json([
+ 'ok' => false,
+ 'error' => 'Invalid JSON: ' . $e->getMessage(),
+ ], Response::HTTP_BAD_REQUEST);
+ }
+ }
+
+ return $this->json([
+ 'ok' => true,
+ 'received' => $data,
+ 'ts' => date('c'),
+ ]);
+ }
+}
diff --git a/src/Game/Controller/HubController.php b/src/Game/Controller/GameController.php
similarity index 64%
rename from src/Game/Controller/HubController.php
rename to src/Game/Controller/GameController.php
index db494c3..dbca841 100644
--- a/src/Game/Controller/HubController.php
+++ b/src/Game/Controller/GameController.php
@@ -7,11 +7,11 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
-final class HubController extends AbstractController
+final class GameController extends AbstractController
{
- #[Route(path: '', name: 'game_hub')]
+ #[Route(path: '', name: 'game')]
public function index(): Response
{
- return $this->render('game/hub/index.html.twig');
+ return $this->render('game/index.html.twig');
}
}
diff --git a/symfony.lock b/symfony.lock
index 9e08978..cdf33ac 100644
--- a/symfony.lock
+++ b/symfony.lock
@@ -155,6 +155,18 @@
"ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f"
}
},
+ "symfony/mercure-bundle": {
+ "version": "0.3",
+ "recipe": {
+ "repo": "github.com/symfony/recipes",
+ "branch": "main",
+ "version": "0.3",
+ "ref": "528285147494380298f8f991ee8c47abebaf79db"
+ },
+ "files": [
+ "./config/packages/mercure.yaml"
+ ]
+ },
"symfony/messenger": {
"version": "7.3",
"recipe": {
diff --git a/templates/game/hub/index.html.twig b/templates/game/index.html.twig
similarity index 64%
rename from templates/game/hub/index.html.twig
rename to templates/game/index.html.twig
index 4e026f5..7433ccc 100644
--- a/templates/game/hub/index.html.twig
+++ b/templates/game/index.html.twig
@@ -12,6 +12,16 @@
{{ 'game.h1'|trans }}
{{ 'game.description'|trans }}
Game 1 assets are active. Enjoy the challenge!
+
+{# Hidden config element read by assets/game1.js #}
+
+
+
{{ 'link.back_to_website'|trans }}
{% endblock %}