http コードに関するアンケートを作成しました。100 個のコードの例を次に示します。
パブリック静的関数 list(): 配列 { 戻る [ [ 'http_message' => '続行', 'http_code' => '100' ]、 [ 'http_message' => 'プロトコルの切り替え', 'http_コード' => '101' ]、 [ 'http_message' => '処理中', 'http_コード' => '102' ]、 [ 'http_message' => '初期のヒント', 'http_コード' => '103' ]、 ]; }
次に、フォームの種類:
クラス QuizControllerType は AbstractType を拡張します { パブリック関数 buildForm(FormBuilderInterface $builder, array $options): void { $ビルダー ->add('応答', TextType::class, [ 'attr' => ['autofocus' => true] ]) ->add('submit', SubmitType::class, array( 'ラベル' => 'スーバント' )) ; } パブリック関数configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ // ここでフォームのオプションを設定します ]); } }
ついに私のコントローラー:
<?php 名前空間 App\Controller; App\Form\QuizControllerType を使用します。 App\Service\HttpCodeService を使用します。 Symfony\Bundle\FrameworkBundle\Controller\AbstractController を使用します。 Symfony\Component\HttpFoundation\Request を使用します。 Symfony\Component\HttpFoundation\Response を使用します。 Symfony\Component\Routing\Annotation\Route を使用します。 クラス QuizController は AbstractController を拡張します { #[Route('/', 名前: 'app_quiz')] パブリック関数インデックス(リクエスト $request): レスポンス { $session = $request->getSession(); $form = $this->createForm(QuizControllerType::class); $indiceQuestion = $request->query->get('question', 0); if (0 === $indiceQuestion) { $session->clear(); $questionsList = InformationCodeService::list(); ダンプ(1,$questionsList); シャッフル($questionsList); dump(2,$questionsList); $responses = array_column($questionsList, 'http_code'); $session->set('questionsList', $questionsList); $session->set('responses', $responses); $session->set('responseFromUser', []); } $responseFromUser = $session->get('responseFromUser'); $message = \count($session->get('questionsList')) > $indice質問 ? $session->get('questionsList')[$indiceQuestion]['http_message'] : ''; $form->handleRequest($request); if ('' === $message) { dump('je passe'); $results = []; $responses = $session->get('responses'); $questionsList = $session->get('questionsList'); for ($i = 0; $iset('スコア', $score); return $this->redirectToRoute('app_quiz_finish'); } dump(3,$session->get('questionsList')); if ($form->isSubmitted() && $form->isValid()) { dd($session->get('questionsList')); $response = $form->getData()['response']; $responseFromUser[] = $response; $session->set('responseFromUser', $responseFromUser); $indiceQuestion ; dd($indiceQuestion); return $this->redirectToRoute('app_quiz', ['question' => $indiceQuestion]); } return $this->render('quiz/index.html.twig', [ 'フォーム' => $form->createView(), 'メッセージ' => $メッセージ、 'インデックス_質問' => $index質問、 'total_question' => \count($session->get('questionsList')) ]); } #[Route('/finish', 名前: 'app_quiz_finish')] パブリック関数finish(): 応答 { return $this->render('quiz/finish.html.twig'); } }
url https://127.0.0.1:8001/
のインデックス上、我の第一转储按顺序打印数组、转储 2 および 3 打乱顺序打印:
配列:4 [▼ 0 => 配列:2 [▼ "http_message" => "初期のヒント" "http_code" => "103" 】 1 => 配列:2 [▼ "http_message" => "処理中" "http_code" => "102" 】 2 => 配列:2 [▼ "http_message" => "続行" "http_code" => "100" 】 3 => 配列:2 [▼ "http_message" => "プロトコルの切り替え" "http_code" => "101" 】 】
しかし、フォームを送信すると、dd は配列シャッフルを再度出力します:
配列:4 [▼ 0 => 配列:2 [▼ "http_message" => "処理中" "http_code" => "102" 】 1 => 配列:2 [▼ "http_message" => "プロトコルの切り替え" "http_code" => "101" 】 2 => 配列:2 [▼ "http_message" => "続行" "http_code" => "100" 】 3 => 配列:2 [▼ "http_message" => "初期のヒント" "http_code" => "103" 】 】
なぜこれが行われるのか理解できません。 dd
を削除すると、フォームを送信した後、別の配列を持つ https://127.0.0.1:8001/?question=1
にリダイレクトされます。もう一度、https://127.0.0.1:8001/?question=2
にリダイレクトしますが、今回は前のページと同じ配列を使用し、配列はランダムではなくなりました。
これは、配列が 2 回シャッフルされることを意味します:
ただし、localhost ページに到達したときに配列を 1 回だけシャッフルしたいです
なぜこれが行われるのか分かりません。何かアイデアがあれば、それは喜びです
フォームを送信したときに、
question
パラメーターを渡しませんでした。コードデフォルト値
$indiceQuestion = 0
を設定すると、配列は再び中断されます。次のように条件を変換できます
または、値が
$session->get('questionsList')
に存在するかどうかなど、他の条件を確認します。