Bonjour à tous
Comme dit dans le titre, l'action de mon form est ignorée lorsque renseignée dynamiquement depuis le controller.
Le formulaire en question étant injecté dans une modale en Ajax...
Tout marche parfaitement si je le code en dur dans le twig du formulaire mais justement j'ai besoin que l'action puisse être modifiée depuis le code de façon à me resservir du même formulaire.
J'ai essayé en envoyant le path en tant que variable aussi depuis le controller dans le tableau d'options du render, le path est bien visible dans l'inspecteur mais n'est pas correctement interprété.
J'ai lu sur plusieurs forums que la méthode décrite (et appliquée dans mon cas) sur le site officiel symfony ne marchait pas et de ce que je vois personne n'a de solution...
Je précise que je ne peux non plus le renseigner en dur en tant qu'attribut du form dans Twig car cela retirerait toute dynamique...
Merci d'avance de m'indiquer quoi faire si vous avez déjà été confrontés à cette problématique.
#[Route('/{elementId}/ajouter-question/', '_ajouter_question')]
public function addQuestion($elementId, Request $request, EntityManagerInterface $em, QuizzesElementsRepository $quizzesElementsRepo): Response
{
$element = $quizzesElementsRepo->find($elementId);
$quizz = $element->getQuizz();
$formTitle = "Ajouter une question";
$question = new Questions();
$form = $this->createForm(QuestionsType::class, $question, [
'action' => $this->generateUrl(
'app_quizzes_questions_reponses_ajouter_question',
[
'elementId' => $element->getId(),
]
),
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$question->setQuizzElement($element);
$em->persist($question);
$em->flush();
if ($form->get('saveAndAdd')->isClicked()) {
$this->addFlash('success', "La nouvelle question a bien été enregistrée dans la base");
return $this->redirectToRoute('app_quizzes_questions_answers_ajouter_question', ['quizzId' => $quizz->getId(), 'elementId' => $elementId, 'message' => "La nouvelle question a bien été enregistrée dans la base"]);
}
if ($form->get('saveAndClose')->isClicked()) {
$this->addFlash('success', "La nouvelle question a bien été enregistrée dans la base");
return $this->redirectToRoute('app_quizzes_modifier', ['quizzId' => $quizz->getId()]);
}
//$this->addFlash('success', "La nouvelle question a bien été enregistrée dans la base.");
// return $this->redirectToRoute('app_quizzes_modifier', ['quizzId' => $quizz->getId()]);
}
if ($request->isXmlHttpRequest()) {
return new JsonResponse(['content' => $this->renderView('quizzes/questions-form.html.twig', ['form' => $form, 'formTitle' => $formTitle, 'quizzId' => $quizz->getId(), 'elementId' => $elementId])]);
} else {
return new JsonResponse("La requête n'a pu s'effectuer car elle n'est pas de type Ajax", 400);
}
}
Bonjour et merci,
J'ai eu réponse à ma question dans un autre forum :
J'avais inutilement déclaré <form></form> alors que j'utilisais entre les balises "form_start" et "form_end" ce qui créait donc un conflit ...