我创建了一个关于http代码的问卷,这是一个100代码的例子:
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'
],
];
}
我的formType:
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
]);
}
}
最后是我的控制器:
<?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');
}
}
在url为https://127.0.0.1:8001/
的索引页上,我的第一个dump按顺序打印数组,dump 2和3打印它shuffled:
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"
]
]
但是当我提交表单时,dd再次打印我的数组shuffle:
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"
]
]
如果我删除dd
,在表单提交后,我会被重定向到https://127.0.0.1:8001/?question=1
,如果我再次提交,我会被重定向到https://127.0.0.1:8001/?question=2
,但这次的数组与前一页相同,数组不再shuffe。
所以这意味着我的数组是shuffle两次:
- 首先当我到达页面
- 第二次当我提交第一份表格
但我只想我的数组 Shuffle 一次,当我到达localhost页
我不知道它为什么会这样,如果你有任何想法,这将是一种乐趣
1条答案
按热度按时间5f0d552i1#
当你提交一个表单时,你不需要传递
question
参数。设置默认值
$indiceQuestion = 0
,并福尔斯数组重排的状态。你可以像这样转换条件
或者检查其他条件,比如
$session->get('questionsList')
中是否存在值