*/ private const array ANSWERS = [ 'ehime' => 'hiroshima', 'kagawa' => 'okayama', 'tokushima' => 'hyogo', ]; /** * @var array */ private const array PREFECTURE_NAMES = [ 'okayama' => '岡山', 'hiroshima' => '広島', 'yamaguchi' => '山口', 'hyogo' => '兵庫', 'osaka' => '大阪', ]; private const string QUIZ_FORM = <<<'HTML' 本州四国連絡橋クイズ

本州四国連絡橋クイズ

四国の各県と橋でつながっている中国地方の県を選んでください。

HTML; public function __construct( private ResponseFactoryInterface $responseFactory, private StreamFactoryInterface $streamFactory, ) { } public function handle(ServerRequestInterface $request): ResponseInterface { if ($request->getMethod() === 'POST') { $postData = []; parse_str((string) $request->getBody(), $postData); $userEhime = $postData['ehime'] ?? ''; $userKagawa = $postData['kagawa'] ?? ''; $userTokushima = $postData['tokushima'] ?? ''; $results = []; $score = 0; // Ehime $userEhimeName = self::PREFECTURE_NAMES[$userEhime] ?? $userEhime; if ($userEhime === self::ANSWERS['ehime']) { $results[] = '

愛媛: ' . htmlspecialchars($userEhimeName) . ' ⭕ 正解!

'; $score++; } else { $results[] = '

愛媛: ' . htmlspecialchars($userEhimeName) . ' ❌ 不正解

'; } // Kagawa $userKagawaName = self::PREFECTURE_NAMES[$userKagawa] ?? $userKagawa; if ($userKagawa === self::ANSWERS['kagawa']) { $results[] = '

香川: ' . htmlspecialchars($userKagawaName) . ' ⭕ 正解!

'; $score++; } else { $results[] = '

香川: ' . htmlspecialchars($userKagawaName) . ' ❌ 不正解

'; } // Tokushima $userTokushimaName = self::PREFECTURE_NAMES[$userTokushima] ?? $userTokushima; if ($userTokushima === self::ANSWERS['tokushima']) { $results[] = '

徳島: ' . htmlspecialchars($userTokushimaName) . ' ⭕ 正解!

'; $score++; } else { $results[] = '

徳島: ' . htmlspecialchars($userTokushimaName) . ' ❌ 不正解

'; } $resultHtml = implode("\n", $results); $body = << クイズ結果

クイズ結果

スコア: {$score} / 3

{$resultHtml}

もう一度挑戦する

HTML; } else { $body = self::QUIZ_FORM; } return $this->responseFactory->createResponse(200) ->withHeader('Content-Type', 'text/html; charset=UTF-8') ->withBody($this->streamFactory->createStream($body)); } }