Symfony4 Symfony 4-如何在另一页上保留表单的值?

Symfony4 Symfony 4-如何在另一页上保留表单的值?,symfony4,Symfony4,作为一个初学者,我从表格开始,我想做一张表格,但要填好几页 为此,我想知道如何保存在第1页上输入的数据,以及如何使用在第2页上输入的数据? 为了避免出现下图中的问题 [问题-第2页][1] 已正确检索第1页上的值 为此,我创建了两个控制器,每个控制器都有自己的页面 第1页: SimulationController.php和simulation.html.twig // src/Controller/SimulationController.php namespace App\Controll

作为一个初学者,我从表格开始,我想做一张表格,但要填好几页

为此,我想知道如何保存在第1页上输入的数据,以及如何使用在第2页上输入的数据? 为了避免出现下图中的问题 [问题-第2页][1] 已正确检索第1页上的值

为此,我创建了两个控制器,每个控制器都有自己的页面

第1页: SimulationController.php和simulation.html.twig

// src/Controller/SimulationController.php

namespace App\Controller;


use App\Model\Client;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Twig\Environment;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;



class SimulationController extends AbstractController
{

    /**
     * @Route("/situation", name="situation")
     * @param Environment $twig
     * @param Request $request
     * @return Response
     */
  public function situation(Environment $twig, Request $request): Response
  {

      $Client = new Client();
      $Situation = $this->createFormBuilder($Client)

          /* Situation */
          ->add("famille", ChoiceType::class, [
              'label' => 'Votre situation familliale ?',
              'choices' => [
                  'Célibataire' => 'celibataire',
                  'Marié(e)' => 'marie',
                  'Pacsé(e)' => 'pacse',
                  'En concubinage' => 'concubinage',
                  'Divorcé(e)' => 'divorce',
                  'Veuf/Veuve' => 'veuf'
              ],
              'attr' => [
                  'class' => 'situation_familliale input']
          ])
          ->add('anneeDeNaissance', IntegerType::class, [
              'label' => 'Quelle est votre année de naissance ?',
              'required' => True,
              'attr' => [
                  'class' => 'naissance input',
                  'placeholder' => 'Ex : 1950']
          ])
          ->add('enfant', ChoiceType::class, [
              'label' => 'Avez vous des enfants ?',
              'choices' => array(
                  'Non' => False,
                  'Oui' => True,
              ),
              'attr' => [
                  'class' => 'enfant']
          ])
          ->add('enfant_nombre', IntegerType::class, [
              'label' => 'Combien avez-vous d\'enfants ?',
              'required' => True,
              'attr' => [
                  'class' => 'enfant_nombre input',
                  'placeholder' => 'Ex : 3']])
          ->add('enfant_foyer', IntegerType::class, [
              'label' => 'Combien sont encore dans votre foyer fiscal ?',
              'required' => True,
              'attr' => [
                  'class' => 'enfant_foyer input',
                  'placeholder' => 'Ex : 3']])
          ->add('pension', ChoiceType::class, [
              'label' => 'Payez vous une pension ?',
              'choices' => array(
                  'Non' => False,
                  'Oui' => True,
              ),
              'attr' => [
                  'class' => 'pension']
          ])
          ->add('pension_tarif', IntegerType::class, [
              'label' => 'Combien vous coûte cette pension mensuellement?',
              'required' => True,
              'attr' => [
                  'class' => 'pension_tarif input',
                  'placeholder' => 'Ex : 450€']])

          ->add('submit', SubmitType::class,[
              'label' => "Suivant",
              'attr' => [
                  "class" => "envoyer show",
              ]
          ])

          ->getForm();


      /* Récupération des données afin de les garder en mémoire */
      $Situation->handleRequest($request);
      dump($Client);
      if($Situation->isSubmitted() && $Situation->isValid()){
          $Situation->getData();
          dump($Client);
          return $this->redirectToRoute('patrimoine');
      }else{
          return $this->render('/content/simulation.html.twig', [
              'SituationForm'=>$Situation->createView()
          ]);
      }

  }
}
simulation.html.twig




{% block title %}  Simulimmo - Simulateur{% endblock %}
{% block stylesheet_content %}<link rel="stylesheet" href="css/simulateur.css"> {% endblock %}

{% block contact %}  {% endblock %}
{% block nous %}  {% endblock %}
{% block demarrer_simulation %}  {% endblock %}

 {% block naviguation %}

     <div class="container-naviguation">
         <div class="content-naviguation">
             <div class="colonne-naviguation">
                 <div class="numero-naviguation situation_naviguation active"><p>1</p></div>
                 <div class="texte-naviguation"> <strong> SITUATION </strong> </div>
             </div>

             <div class="colonne-naviguation separation-naviguation patrimoine_separation"></div>

             <div class="colonne-naviguation">
                 <div class="numero-naviguation patrimoine_naviguation"><p>2</p></div>
                 <div class="texte-naviguation"><strong> PATRIMOINE </strong> </div>
             </div>

             <div class="colonne-naviguation separation-naviguation epargne_separation"></div>

             <div class="colonne-naviguation">
                 <div class="numero-naviguation epargne_naviguation"><p>3</p></div>
                 <div class="texte-naviguation"> <strong>ÉPARGNE</strong> </div>
             </div>

             <div class="colonne-naviguation separation-naviguation objectifs_separation"></div>

             <div class="colonne-naviguation">
                 <div class="numero-naviguation objectifs_naviguation"><p>4</p></div>
                 <div class="texte-naviguation"> <strong>OBJECTIFS</strong> </div>
             </div>

             <div class="colonne-naviguation separation-naviguation resultats_separation"></div>

             <div class="colonne-naviguation">
                 <div class="numero-naviguation resultats_naviguation"><p>5</p></div>
                 <div class="texte-naviguation"> <strong>RÉSULTATS</strong></div>
             </div>
         </div>
     </div>
 {% endblock %}

{% block body %}


    <!--

    Partie questionnaire

    -->
    <div class="container-questionnaire">
        <div class="content-questionnaire">
            <div class="section">
                <div class="situation section show">
                    {% block simulation %}
                    <h1> SITUATION </h1>
                    {{ form_start(SituationForm, {'attr': {'novalidate': 'novalidate'}}) }}
                        {{ form_row(SituationForm.famille) }}
                        {{ form_row(SituationForm.anneeDeNaissance)}}
                        {{ form_row(SituationForm.enfant)}}
                        {{ form_row(SituationForm.enfant_nombre) }}
                        {{ form_row(SituationForm.enfant_foyer) }}
                        {{ form_row(SituationForm.pension) }}
                        {{ form_row(SituationForm.pension_tarif) }}
                        {{ form_row(SituationForm.pension_tarif) }}
                    {{ form_end(SituationForm) }}
                    {% endblock %}

                </div>

                <!-- Section 2 | patrimoine -->
                {% block patrimoine %}{% endblock %}

                <!-- Section 3 | epargne -->
                <div class="epargne section hidden">
                    <h1>ÉPARGNE </h1>
                    {% block epargne %} {% endblock %}
                </div>

                <!-- Section 4 | objectifs -->
                <div class="objectifs section hidden">
                    <h1>OBJECTIFS </h1>
                    {% block objectifs %} {% endblock %}
                </div>

                <!-- Section 5 | resultats -->
                <div class="resultats section hidden">
                    <h1>RÉSULTATS </h1>
                    {% block resultats %} {% endblock %}
                </div>


                <div class="button">
                    <A href="patrimoine"><button class="envoyer show">Suivant</button></A>
                </div>
            </div>
        </div>
    </div>
{% endblock %}

<?php

// src/Controller/PatrimoineController.php

namespace App\Controller;


use App\Model\Client;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Twig\Environment;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;


class PatrimoineController extends AbstractController
{

    /**
     * @Route("/patrimoine", name="patrimoine")
     * @param Environment $twig
     * @param Request $request
     * @return Response
     */
    public function patrimoine(Environment $twig, Request $request): Response
    {

        $Client = new Client();
        $Patrimoine = $this->createFormBuilder($Client)
            /* Situation */
            ->add("test", ChoiceType::class, [
                'label' => 'Votre situation familliale ?',
                'choices' => [
                    'Célibataire' => 'celibataire',
                    'Marié(e)' => 'marie',
                    'Pacsé(e)' => 'pacse',
                    'En concubinage' => 'concubinage',
                    'Divorcé(e)' => 'divorce',
                    'Veuf/Veuve' => 'veuf'
                ],
                'attr' => [
                    'class' => 'situation_familliale input']])
            ->add('test2', SubmitType::class,[
                'label' => "Suivant",
                'attr' => [
                    "class" => "envoyer show",
                ]
            ])
            ->getForm();


        /* Récupération des données afin de les garder en mémoire */
        $Patrimoine->handleRequest($request);
        dump($Client);
        if ($Patrimoine->isSubmitted() && $Patrimoine->isValid()) {
            $Patrimoine->getData();
            return $this->redirectToRoute('patrimoine');
        } else {
            return $this->render('/content/patrimoine.html.twig', [
                'PatrimoineForm' => $Patrimoine->createView()
            ]);
        }

    }
}
<!-- patrimoine.html.twig -->

{% extends '/content/simulation.html.twig' %}


{% block simulation %}{% endblock %}
{% block patrimoine %}
    <div class="patrimoine section hidden">
        <h1>PATRIMOINE </h1>
        {{ form(PatrimoineForm) }}
    </div>
{% endblock %}

{% block javascript %}
    console.log("patrimoine");

    $(".patrimoine_separation, .patrimoine_naviguation").addClass("active");
    $(".patrimoine").css("display", "inherit");
    $(".situation").css("display", "none");
{% endblock %}


我自己没有使用过它,因此无法证明它有多好,但这里有一个包可以帮助您构建多页表单:

到目前为止您尝试了什么?所有给定的代码都做了什么?目前我还没有尝试太多,我更多的是在搜索模式中寻找适合我的代码。这段代码允许我创建一个表单,然后检查数据是否正确,并将我重定向到第二个表单,但我希望从第一个表单检索值,以便将它们与我必须创建的其他表单合并。可以通过多种方式存储数据。当我需要多步骤表单时,我更喜欢使用会话存储临时数据。当然,您需要阅读Symfony如何处理会话数据(我认为您使用的是框架,因为如果我记得很清楚,表单组件也需要会话组件作为依赖项来工作),尝试一下,如果您遇到问题,请带着特定的代码回到这里。好的,谢谢,基本上,我必须使用一个会话来保存其中的值,在我的问卷结束时,我面对我想要的,是吗?那又如何?


namespace App\Model;

use Symfony\Component\Validator\Constraints as Assert;


class Client{

    public $famille;

    /**
     * @Assert\NotBlank(message="Merci de remplir ce champ.")
     * @Assert\Range(
     *      min = 1900,
     *      max = 2019,
     *      minMessage = "Merci de rentrer une valeur correcte. ",
     *      maxMessage = "Merci de rentrer une valeur correcte."
     * )
     *

     */
    public $anneeDeNaissance;


    public $enfant;

    /**
     * @Assert\NotBlank(message="Merci de remplir ce champ.")
     * @Assert\Range(
     *      min = 0,
     *      max = 200,
     *      minMessage = "Merci de rentrer une valeur correcte. ",
     *      maxMessage = "Merci de rentrer une valeur correcte."
     * )
     *
     */
    public $enfant_nombre;

    /**
     * @Assert\NotBlank(message="Merci de remplir ce champ.")
     * @Assert\Range(
     *      min = 0,
     *      max = 200,
     *      minMessage = "Merci de rentrer une valeur correcte. ",
     *      maxMessage = "Merci de rentrer une valeur correcte."
     * )
     *
     */
    public $enfant_foyer;

    public $pension;

    /**
     * @Assert\NotBlank(message="Merci de remplir ce champ.")
     * @Assert\Range(
     *      min = 0,
     *      max = 9999999999,
     *      minMessage = "Merci de rentrer une valeur correcte.",
     *      maxMessage = "Merci de rentrer une valeur correcte."
     * )
     *
     */
    public $pension_tarif;


    public $test;



}```


  [1]: https://i.stack.imgur.com/EVYU6.jpg