Rumah > Soal Jawab > teks badan
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
P粉1896062692024-03-20 10:51:44
Apabila anda menyerahkan borang, anda tidak melepasi parameter question
. Jadi kod
$indiceQuestion = $request->query->get('question', 0);
Tetapkan nilai lalai$indiceQuestion = 0
dan jatuh ke dalam situasi huru-hara tatasusunan sekali lagi.
Anda boleh menukar syarat seperti ini
if (0 === $indiceQuestion && !$form->isSubmitted())
Atau semak syarat lain, seperti sama ada nilai wujud dalam $session->get('questionsList')