Bonjour,
Voila je rencontre un petit problème avec mon code.
Ce que j'ai fait :
Voilà ma partie ou j'affiche mes questions et réponses, étant débutante sur Symfony, je me suis dit que j'ai dû faire une erreur car les forms ne se créer pas comme ça ! (j'ai le bon affichage mais ce que je souhaite c'est récupérer l'identifiant de l'utilisateur et ses réponses répondu )
{% extends 'base.html.twig' %}
{% block title %}Quiz{% endblock %}
{% block body %}
<div class="center container">
<div class="ligne">
<div class="quiz">
<form action="" method="post">
{# S'il est connecté on récupère son Nom d'utilisateur, aussi non on demande le nom et prénom #}
{% if app.user %}
<input type="text" placeholder="Nom" value="{{ app.user.username }}" hidden>
{% else %}
<div class="gauche quiz_identifiant">
<div>
<label for="nom">Nom :</label>
<input type="text" name="nom" required >
</div>
<div>
<label for="nom">Prénom :</label>
<input type="text" name="prenom" required>
</div>
</div>
{% endif %}
{% for question in questionnaire.questions %}
<div class="titreQuiz">
<h2>{{ question.libelleQuestion}}</h2>
</div>
{% for reponse in question.reponses %}
{% if {'id' : reponse.question}=={'id' : question.libelleQuestion} %}
<div class="reponseQuiz">
{# Afficher le bon type de Input selon la question #}
{% if question.typeDeQuestion =='radio' %}
<input type="radio" name="reponses" id="{{reponse.libelleReponse}}" value="{{reponse.libelleReponse}}">
<label for="{{reponse.libelleReponse}}">{{reponse.libelleReponse}}</label>
{% else %}
<input type="checkbox" name="reponses" id="{{reponse.libelleReponse}}" value="{{reponse.libelleReponse}}">
<label for="{{reponse.libelleReponse}}">{{reponse.libelleReponse}}</label>
{% endif %}
</div>
{% endif %}
{% endfor %}
{% else %}
<p>Il n'y a pas de question 😢</p>
{% endfor %}
<div class="centerbtn">
<input class="btn bleu" type="submit" value="Valider">
<a href="{{ path('home') }}" class="btn orange">Retour</a>
</div>
</form>
</div>
</div>
</div>
{% endblock %}
Du coup, j'ai utilisé le "make:crud" pour mon entité ReponseUtilisateur. Mes réponses et mes utilisateurs sont reliés par des clefs étrangères.
ReponseUtilisateur.php :
/**
* @ORM\Entity(repositoryClass=ReponseUtilisateurRepository::class)
*/
class ReponseUtilisateur
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity=Reponse::class, inversedBy="reponseUtilisateurs")
* @ORM\JoinColumn(nullable=false)
*/
private $Reponse;
/**
* @ORM\ManyToOne(targetEntity=Utilisateur::class, inversedBy="reponseUtilisateurs")
* @ORM\JoinColumn(nullable=false)
*/
private $Utilisateur;
Du coup, j'ai voulu essayer une autre stratégie, en utilisant le new de ReponseUtilisateur et intégrer les informations comme aux dessus (questions avec ses réponses...) , mais j'ai du mal à mis prendre avec les controller je pense.
new.html.twig :
{% extends 'base.html.twig' %}
{% block title %}Quiz{% endblock %}
{% block body %}
<div class="center container">
<div class="ligne">
<div class="quiz">
{{ include('reponse_utilisateur/_form.html.twig') }}
<div class="centerbtn">
<a href="{{ path('home') }}" class="btn orange">Retour</a>
</div>
</div>
</div>
</div>
{% endblock %}
_form.html.twig :
{# Form on veut récupérer identifiant de l'utilisateur et ces réponses #}
{{ form_start(form) }}
{# {{ form_widget(form) }} #}
{# Utilisateur : - S' il est connecté reprendre son identifiant dans le input #}
{# - En anonyme un input vide, ou il doit compléter son identifiant #}
{{ form_row(form.Utilisateur) }}
{# Afficher les questions avec les réponses #}
{# Afficher les réponses en type radio ou checkbox #}
{{ form_row(form.Reponse) }}
<button class="btn bleu">{{ button_label|default('Valider') }}</button>
{{ form_end(form) }}
Et ici mes Controller que j'utilise :
QuestionnaireController.php
/**
* @Route("/home/", name="home" , methods={"GET"})
* @param Questionnaire $questionnaire
* @return Response
*/
public function home(QuestionnaireRepository $questionnaireRepository, QuestionRepository $questionRepository): Response
{
return $this->render('questionnaire/home.html.twig', [
'questionnaires' => $questionnaireRepository->findAll(),
'questions' => $questionRepository->findAll(),
]);
}
/**
* @Route("/{id}/quiz", name="question_quiz", methods={"GET"})
* @param Questionnaire $questionnaire
* @return Response
*/
public function quiz(Questionnaire $questionnaire, Request $request): Response
{
return $this->render('question/quiz.html.twig',[
'questionnaire' => $questionnaire,
]);
}
ReponseUtilisateurController.php:
/**
* @Route("/new", name="reponse_utilisateur_new", methods={"GET","POST"})
*/
public function new(Request $request): Response
{
$reponseUtilisateur = new ReponseUtilisateur();
$form = $this->createForm(ReponseUtilisateurType::class, $reponseUtilisateur);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($reponseUtilisateur);
$entityManager->flush();
return $this->redirectToRoute('reponse_utilisateur_index');
}
return $this->render('reponse_utilisateur/new.html.twig', [
'reponse_utilisateur' => $reponseUtilisateur,
'form' => $form->createView(),
]);
}