SYMFONY 4从我的表单中恢复数据无效

问题描述 投票:0回答:1

我刚刚开始学习Symfony,我已经掌握了基本知识,但是我已经在恢复用户数据方面遇到了问题。

[当我在symfony导航栏中查看时,我看到$ Client函数不会恢复任何值,而$ request函数确实会恢复所有输入的值,我不明白为什么。...

以下是代码:Client.php


namespace App\Model;

use Symfony\Component\Validator\Constraints as Assert;

class Client{

    public $famille;

    /**
     * @Assert\Range(min=1900, max=2050)
     */
    public $anneeDeNaissance;

    public $enfant;

    public $enfant_nombre;

    public $enfant_foyer;

    public $pension;

    public $pension_tarif;


}

simulateur.html.twig

{% extends "home.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 simulation %}  {% endblock %}


{% block body %}
    <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>
    <!--

    Partie questionnaire

    -->
    <div class="container-questionnaire">
        <div class="content-questionnaire">
            <div class="section">
                <div class="situation section show">
                    <h1> SITUATION </h1>
                   {{ {{ form_start(SituationForm) }}
                        {{ 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_end(SituationForm) }} }}
                </div>

                <!-- Section 2 | patrimoine -->
                <div class="patrimoine section hidden">
                    <h1>PATRIMOINE </h1>

                </div>

                <!-- Section 3 | epargne -->
                <div class="epargne section hidden">
                    <h1>ÉPARGNE </h1>
                </div>

                <!-- Section 4 | objectifs -->
                <div class="objectifs section hidden">
                    <h1>OBJECTIFS </h1>
                </div>

                <!-- Section 5 | resultats -->
                <div class="resultats section hidden">
                    <h1>RÉSULTATS </h1>
                </div>

                <div class="button">
                    <a><button onClick="pagePrecedente()" class="precedent hidden">Précédent</button></a>
                </div>

            </div>
        </div>
    </div>
{% endblock %}


{% block javascript %}

        function changerElement(section){
            hidden = document.getElementsByClassName(section);
            show = document.getElementsByClassName(section);

        }

        function afficherConsole(section, hidden, show){
            console.log(section);
            console.log(hidden);
            console.log(show);
        }

        function affichageNouvelleSection(section, section_precedente){ //CSS modification
            $("." + section_precedente).css("display", "none"); // Enleve la partie d'avant
            $("." + section).css("display", "inherit"); // Affiche la page d'après
        }

        function modificationNaviguation(section){ // CSS modification
            $("." + section + "_naviguation").addClass("active"); // Changement de la boule (Grâce à ACTIVE)
            $("." + section + "_separation").addClass("active"); // Changement de la séparation
            $(".precedent").addClass("show").removeClass("hidden"); // Affiche le bouton pour retourner en arrière
        }



        /**
         * La fonction suivant() s'occupe d'afficher la nouvelle partie du questionnaire
         */
        var suivant = 1;
        function pageSuivante(){



            var situation = "situation";
            var patrimoine = "patrimoine";
            var epargne = "epargne";
            var objectifs = "objectifs";
            var resultats = "resultats";

            /*Sélection de votre page */
            switch(suivant){
                case 1: /* Situation */
                    changerElement(situation);
                    affichageNouvelleSection(situation, resultats);
                    modificationNaviguation(situation);
                    afficherConsole(situation);
                    break;
                case 2: /* Patrimoine */
                    changerElement(patrimoine);
                    affichageNouvelleSection(patrimoine, situation);
                    modificationNaviguation(patrimoine);
                    afficherConsole(patrimoine);
                    break;
                case 3: /* Epargne */
                    changerElement(epargne);
                    affichageNouvelleSection(epargne, patrimoine);
                    modificationNaviguation(epargne);
                    afficherConsole(epargne);
                    break;
                case 4: /* Objectifs */
                    changerElement(objectifs);
                    affichageNouvelleSection(objectifs, epargne);
                    modificationNaviguation(objectifs);
                    afficherConsole(objectifs);
                    break;
                case 5: /* Résultat */
                    changerElement(resultats);
                    affichageNouvelleSection(objectifs, resultats);
                    modificationNaviguation(resultats);
                    afficherConsole(resultats);
                    break;
                default:
                    suivant = 0;
                    console.log("default");
                    break;

                    suivant += 1;
            }



            return suivant;
        }

        /**
         * La fonction precedent() s'occupe d'afficher la partie précédente du questionnaire
         */
        function pagePrecedente(){
            suivant -= 2;
            pageSuivante();

            return suivant;
        }
{% endblock %}

SituationController.php

<?php
// src/Controller/SimulationController.php

namespace App\Controller;


use App\Model\Client;
use Doctrine\Common\Persistence\ObjectManager;
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 SituationController extends AbstractController
{
    /**
     * @Route("/simulateur", name="simulateur")
     */
  public function situation(Environment $twig, Request $request): Response
  {

      $Client = new Client();
      $Situation = $this->createFormBuilder($Client)
            ->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' => False,
                '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' => False,
                'attr' => [
                    'class' => 'enfant_nombre input',
                    'placeholder' => 'Ex : 3']])

            ->add('enfant_foyer', IntegerType::class, [
                'label' => 'Combien sont encore dans votre foyer fiscal ?',
                'required' => False,
                'attr' => [
                    'class' => 'enfant_foyer input',
                    'placeholder' => 'Ex : 3']])

            ->add('pension', ChoiceType::class,[
                  'label' => 'Avez vous des enfants ?',
                  'choices' => array(
                      'Non' => False,
                      'Oui' => True,
                  ),
                  'attr' =>[
                      'class' => 'pension']
              ])

            ->add('pension_tarif', IntegerType::class, [
                'label' => 'Combien vous coûte cette pension mensuellement?',
                'required' => False,
                'attr' => [
                    'class' => 'pension_tarif input',
                    'placeholder' => 'Ex : 450€']])

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

            ])
            ->getForm();

      dump($request);


        return $this->render('/content/simulateur.html.twig', [
            'SituationForm'=>$Situation->createView()
        ]);
      }
}

Ps:这是我第一次使用StackOverflow。

php forms symfony twig submit
1个回答
0
投票

您缺少此部分,该部分实际上是根据请求填充表格的。

$situation->handleRequest($request);

如果您的$ client尚未自动更新,则可以使用:

检索数据。
$situation->getData();
© www.soinside.com 2019 - 2024. All rights reserved.