Rumah  >  Soal Jawab  >  teks badan

Mengapa tatasusunan saya dikocok dua kali dan bukannya sekali?

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粉818561682P粉818561682237 hari yang lalu273

membalas semua(1)saya akan balas

  • P粉189606269

    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')

    balas
    0
  • Batalbalas