Saya membuat soal selidik tentang kod http, berikut ialah contoh 100 kod:
public static function list(): array { return [ [ 'http_message' => 'Continue', 'http_code' => '100' ], [ 'http_message' => 'Switching Protocols', 'http_code' => '101' ], [ 'http_message' => 'Processing', 'http_code' => '102' ], [ 'http_message' => 'Early Hints', 'http_code' => '103' ], ]; }
Kemudian jenis borang saya:
class QuizControllerType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder ->add('response', TextType::class, [ 'attr' => ['autofocus' => true] ]) ->add('submit', SubmitType::class, array( 'label' => 'Suivant' )) ; } public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ // Configure your form options here ]); } }
Akhirnya pengawal saya:
<?php namespace App\Controller; use App\Form\QuizControllerType; use App\Service\HttpCodeService; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class QuizController extends AbstractController { #[Route('/', name: 'app_quiz')] public function index(Request $request): Response { $session = $request->getSession(); $form = $this->createForm(QuizControllerType::class); $indiceQuestion = $request->query->get('question', 0); if (0 === $indiceQuestion) { $session->clear(); $questionsList = InformationCodeService::list(); dump(1,$questionsList); shuffle($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')) > $indiceQuestion ? $session->get('questionsList')[$indiceQuestion]['http_message'] : ''; $form->handleRequest($request); if ('' === $message) { dump('je passse'); $results = []; $responses = $session->get('responses'); $questionsList = $session->get('questionsList'); for ($i = 0; $i < count($responseFromUser); $i++) { if ($responseFromUser[$i] === $responses[$i]) { $results[$i] = $responseFromUser[$i]; } } $score = \count($results). ' / '. \count($questionsList); $session->set('score', $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' => $form->createView(), 'message' => $message, 'indice_question' => $indiceQuestion, 'total_question' => \count($session->get('questionsList')) ]); } #[Route('/finish', name: 'app_quiz_finish')] public function finish(): Response { return $this->render('quiz/finish.html.twig'); } }
Pada halaman indeks di url https://127.0.0.1:8001/
, lambakan pertama saya mencetak tatasusunan mengikut tertib, membuang 2 dan 3 cetakan tidak tertib:
array:4 [▼ 0 => array:2 [▼ "http_message" => "Early Hints" "http_code" => "103" ] 1 => array:2 [▼ "http_message" => "Processing" "http_code" => "102" ] 2 => array:2 [▼ "http_message" => "Continue" "http_code" => "100" ] 3 => array:2 [▼ "http_message" => "Switching Protocols" "http_code" => "101" ] ]
Tetapi apabila saya menyerahkan borang, dd mencetak shuffle tatasusunan saya sekali lagi:
array:4 [▼ 0 => array:2 [▼ "http_message" => "Processing" "http_code" => "102" ] 1 => array:2 [▼ "http_message" => "Switching Protocols" "http_code" => "101" ] 2 => array:2 [▼ "http_message" => "Continue" "http_code" => "100" ] 3 => array:2 [▼ "http_message" => "Early Hints" "http_code" => "103" ] ]
Saya tidak faham mengapa ini dilakukan. Jika saya mengalih keluar dd
,提交表单后,我将使用不同的数组重定向到 https://127.0.0.1:8001/?question=1
,如果我再次提交,我将重定向到 https://127.0.0.1 :8001/?question=2
tetapi kali ini ia menggunakan tatasusunan yang sama seperti halaman sebelumnya dan tatasusunan tidak lagi rawak.
Jadi ini bermakna tatasusunan saya dikocok dua kali:
Tetapi saya hanya mahu mengocok tatasusunan sekali sahaja apabila sampai ke halaman localhost
Saya tidak tahu mengapa ia melakukan ini, jika anda mempunyai sebarang idea, ia pasti menyeronokkan
Apabila anda menyerahkan borang, anda tidak melepasi parameter
question
. Jadi kodTetapkan nilai lalai
$indiceQuestion = 0
dan jatuh ke dalam situasi huru-hara tatasusunan sekali lagi.Anda boleh menukar syarat seperti ini
Atau semak syarat lain, seperti sama ada nilai wujud dalam
$session->get('questionsList')