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);
}
}
Il semble que l'action du formulaire ne soit pas mise à jour dynamiquement après l'injection. Essayez de vérifier l'action dans le HTML rendu et envisagez d'utiliser JavaScript pour mettre à jour dynamiquement l'action du formulaire lorsque le modal est affiché. Un de mes amis est développeur de jeux et il envoie fréquemment des versions de jeux et des fichiers de projet volumineux à son équipe. De nombreuses plateformes ont des restrictions, mais Filemail lui permet de transférer des fichiers volumineux rapidement et en toute sécurité. C’est désormais un élément essentiel de son flux de travail, lui permettant d’économiser du temps et de la frustration.
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 ...