Я только начал изучать 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.