[SYMFONY] afficher ou pas un élément si le controller renvoie le form noValid
Résolu
rdbn
Messages postés
95
Date d'inscription
Statut
Membre
Dernière intervention
-
rdbn Messages postés 95 Date d'inscription Statut Membre Dernière intervention -
rdbn Messages postés 95 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je vais essayé d'être le plus clair..
J'ai un controller qui affiche mais édite également les données de l'utilisateur connecté.
Par défaut seulement les infos (dans un card) de l'utilisateur sont affiché sur cette page avec une petite icone dedans qui quand je click dessus m'affiche en dessous (fait avec jquery) la card edit.
-> Quand tout est ok
Quand je click sur l'icone la card edit apparaît je modifie correctement (pour ne pas avoir d'erreur)et je valide. la page charge donc m'envoie sur la page par défaut (cette à dire elle-même) juste la card avec les infos. + un addflash avec un message qui me notifie bien sur cette page en haut 'Profil mise à jour' si le formulaire est bien envoyé et valide.
jusque là ca va..
-> Quand arrive une erreur...
Quand les valeurs ne respect pas mes regex tout est bien notifié comme je l'ai demandé dans le formType idem pour le champ null. le problème c'est qu'il me fait la même chose que quand tout est bon il me renvoie sur la page par defaut et il faut que j'aille clické pour ré affiché la card modifié pour voir les erreurs.
Ce que je voudrais c'est que quand tout est bon tu peux afficher par défaut mais s'il y a une erreur tu me garde la card edit AFFICHE pour que l'on voit directement les erreurs.
donc je vous montre ce que j'ai tenté de faire sans succès...
-essai 1 :
Afficher un addFlash au cas d'erreur l'utilisateur comprendra qu'il y a une erreur et ira ouvrir la card mais ici le message s'affiche mes plus les erreurs sous les inputs
Mon controller :
-essai 2 :
J'ai voulu passer une variable $error = false dans le if($form->isSubmitted() && $form->isValid()) et sinon $error = true
donc dans mon template je lui dis si error == false ma card edit peut être en display:none
sinon ma card je n'ajoute pas de display:none ce qui devrais l'afficher
Le problème ici c'est la card reste tout le temps affiché même au chargement de la page.
Mon controller :
Mon template twig de la card edit:
Je n'est plus d'idée ou comment résoudre ceci...
S'il vous manque des éléments pour mieux comprendre faite le moi savoir
Merci pour votre aide
Je vais essayé d'être le plus clair..
J'ai un controller qui affiche mais édite également les données de l'utilisateur connecté.
Par défaut seulement les infos (dans un card) de l'utilisateur sont affiché sur cette page avec une petite icone dedans qui quand je click dessus m'affiche en dessous (fait avec jquery) la card edit.
-> Quand tout est ok
Quand je click sur l'icone la card edit apparaît je modifie correctement (pour ne pas avoir d'erreur)et je valide. la page charge donc m'envoie sur la page par défaut (cette à dire elle-même) juste la card avec les infos. + un addflash avec un message qui me notifie bien sur cette page en haut 'Profil mise à jour' si le formulaire est bien envoyé et valide.
jusque là ca va..
-> Quand arrive une erreur...
Quand les valeurs ne respect pas mes regex tout est bien notifié comme je l'ai demandé dans le formType idem pour le champ null. le problème c'est qu'il me fait la même chose que quand tout est bon il me renvoie sur la page par defaut et il faut que j'aille clické pour ré affiché la card modifié pour voir les erreurs.
Ce que je voudrais c'est que quand tout est bon tu peux afficher par défaut mais s'il y a une erreur tu me garde la card edit AFFICHE pour que l'on voit directement les erreurs.
donc je vous montre ce que j'ai tenté de faire sans succès...
-essai 1 :
Afficher un addFlash au cas d'erreur l'utilisateur comprendra qu'il y a une erreur et ira ouvrir la card mais ici le message s'affiche mes plus les erreurs sous les inputs
Mon controller :
/** * @Route("/profil") */ class UserController extends AbstractController { /** * @Route("", name="app_profil_user") */ public function profil(Request $request, EntityManagerInterface $manager): Response { $user = $this->getUser(); // $this->getUser() récupère l'utilisateur actuellement connecté $form = $this->createForm(EditProfilType::class, $user); $form->handleRequest($request); if($form->isSubmitted() && $form->isValid()) { $manager->persist($user); $manager->flush(); $this->addFlash('success', 'Profil mis à jour !'); return $this->redirectToRoute('app_profil_user'); } elseif($form->isSubmitted() && !$form->isValid()) { $this->addFlash('danger', 'Une erreur est survenue lors de l\'envoi du formulaire.'); return $this->redirectToRoute('app_profil_user'); } return $this->render('user/base_profil.html.twig', [ 'form' => $form->createView() ] ); }
-essai 2 :
J'ai voulu passer une variable $error = false dans le if($form->isSubmitted() && $form->isValid()) et sinon $error = true
donc dans mon template je lui dis si error == false ma card edit peut être en display:none
sinon ma card je n'ajoute pas de display:none ce qui devrais l'afficher
Le problème ici c'est la card reste tout le temps affiché même au chargement de la page.
Mon controller :
/** * @Route("/profil") */ class UserController extends AbstractController { /** * @Route("", name="app_profil_user") */ public function profil(Request $request, EntityManagerInterface $manager): Response { $user = $this->getUser(); // $this->getUser() récupère l'utilisateur actuellement connecté $form = $this->createForm(EditProfilType::class, $user); $form->handleRequest($request); $error = ' '; // $error = false par defaut aussi n'a rien donné if($form->isSubmitted() && $form->isValid()) { $manager->persist($user); $manager->flush(); $error = false; $this->addFlash('success', 'Profil mis à jour !'); return $this->redirectToRoute('app_profil_user'); } $error = true; return $this->render('user/base_profil.html.twig', [ 'form' => $form->createView(), 'error' => $error ] ); }
Mon template twig de la card edit:
{% if error == false %} <div class="col-11 card edit" id="EditCard" style="display: none;"> {% else %} <div class="col-11 card edit" id="EditCard"> {% endif %}
Je n'est plus d'idée ou comment résoudre ceci...
S'il vous manque des éléments pour mieux comprendre faite le moi savoir
Merci pour votre aide
Configuration: Windows / Chrome 93.0.4577.63
A voir également:
- [SYMFONY] afficher ou pas un élément si le controller renvoie le form noValid
- Afficher appdata - Guide
- Vers quelle adresse web renvoie ce lien - Guide
- Afficher le 0 devant un nombre dans excel - Guide
- Mise en forme conditionnelle excel formule si - Guide
- Renvoie d'appel ooredoo - Forum Samsung
2 réponses
Bonjour,
s'il y a une erreur tu me garde la card edit AFFICHE pour que l'on voit directement les erreurs
Si je comprends bien, le soucis vient du fait que la "card edit" n'est par défaut pas affichée sur la page alors que celle-ci devrait s'afficher si une erreur a été faite lors de la saisie du formulaire.
dans mon template je lui dis si error == false ma card edit peut être en display:none
sinon ma card je n'ajoute pas de display:none ce qui devrais l'afficher
Par défaut la card n'est pas affiché, l'ajout d'un display: none pour masquer la card ne semble donc pas nécessaire. Il faudrait plutôt faire l'inverse :
- par défaut la card n'est pas affichée
- si error == true : on affiche la card (éventuellement avec un display: block; ou idéalement en utilisant la même méthode jQuery lors du clic sur l'icone qui affiche la card)
s'il y a une erreur tu me garde la card edit AFFICHE pour que l'on voit directement les erreurs
Si je comprends bien, le soucis vient du fait que la "card edit" n'est par défaut pas affichée sur la page alors que celle-ci devrait s'afficher si une erreur a été faite lors de la saisie du formulaire.
dans mon template je lui dis si error == false ma card edit peut être en display:none
sinon ma card je n'ajoute pas de display:none ce qui devrais l'afficher
Par défaut la card n'est pas affiché, l'ajout d'un display: none pour masquer la card ne semble donc pas nécessaire. Il faudrait plutôt faire l'inverse :
- par défaut la card n'est pas affichée
- si error == true : on affiche la card (éventuellement avec un display: block; ou idéalement en utilisant la même méthode jQuery lors du clic sur l'icone qui affiche la card)