IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Formulaire dynamique avec Ajax dans un pop-up


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Août 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2016
    Messages : 21
    Par défaut Formulaire dynamique avec Ajax dans un pop-up
    Bonjour,

    Voici mon problème :

    Sur la page UtilisateurBundle:Tableau:index.html.twig : Au clic sur un lien 'profil', j'affiche un pop-up avec comme contenu les informations de l'utilisateur, qui se trouve dans {{ path("profil") }} (UtilisateurBundle:Profil:index.html.twig) -> ça fonctionne

    Ensuite, au clic sur le bouton 'modifier', j'affiche (toujours sur le même pop-up), le formulaire de modification, qui se trouve dans {{ path("profil_modifier") }} (UtilisateurBundle:Profil:index.html.twig -> même contenu que le profil mais avec le form ), avec dans les champs les données de l'utilisateur -> ça fonctionne

    A l'enregistrement du formulaire, j'appelle le controller Profil (voir plus bas).

    Au submit du formulaire, je voudrais enregistrer les informations et afficher le contenu {{ path("profil") }} (les info de l'utilisateur), toujours sur le pop-up -> ça ne fonctionne pas

    Pour l'instant, les données ne s'enregistrent pas et je retourne sur la page UtilisateurBundle:Tableau:index.html.twig, pop-up fermé.

    De mon avis personnel, je pense que c'est un problème de méthode (GET/POST). Mais je n'en suis pas sûre.

    J'espère avoir été claire sur mon problème et j'espère vraiment que quelqu'un puisse m'aider ;)

    Merci d'avance !

    #Pop-up
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <div class='modal'>
        <div class='modal-dialog'>
            <div class='modal-content'>
                <div class='modal-header'>
                    <div class="row">
                        <div class="col-sm-offset-11">
                            <button class='btn btn-default' data-dismiss='modal'>Fermer la fenêtre</button>
                        </div>					
                    </div>
                </div>
                <div class='modal-body'>
                </div>
            </div>
        </div>
    </div>

    #Script JS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    $('.profil').click(function (e) {
        e.preventDefault();
     
        $.ajax({
            type: 'GET',
            url: '{{ path("profil") }}',
            success: function(data) {
                $('.modal')
                    .modal('show')
                    .addClass('modal-profil');
                $('.modal-body')
                    .empty()
                    .append(data);
     
                $('.modifier').click(function (e) {
                    e.preventDefault();
     
                    $.ajax({
                        type: 'GET',
                        url: '{{ path("profil_modifier") }}',
                        success: function(data) {
                            $('.modal')
                                .modal('show')
                                .addClass('modal-profil');
                            $('.modal-body')
                                .empty()
                                .append(data);
                        }
                    });
     
                });
     
            }
        });
     
    });
    #Code du controller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    $em = $this->getDoctrine()->getManager();
     
            /* Récupère le formulaire */
            $form = $this->createForm(new ProfilType());
            $request = $this->getRequest();
     
            /* Valeur par défaut du champ nom */
            $form->get('nom')->setData($this->getUser()->getNom());
            /* Plus de champs[...] */
     
            /* Si le formulaire a été envoyé */
            if($request->getMethod() == 'POST') {
                $form->bind($request);
     
                /* Vérifie si le formulaire est valide */
                if($form->isValid()) {
                    /* Récupère les données du formulaire */
                    $data = $this->getRequest()->request->get('profil');
     
                    if($data['nom'] != $this->getUser()->getNom()) {
                        $this->getUser()->setNom($data['nom']);
                    }
     
                    /* Plus de données du form récupérées[...] */
     
                    $em->persist($this->getUser());
                    $em->flush();
     
     
                    /* Redirection vers le pop-up Profil */
                    return $this->render('UtilisateurBundle:Profil:index.html.twig',
                        array( 'utilisateur' => $this->getUser() ));
                }
            }
     
            return $this->render('UtilisateurBundle:Profil:index.html.twig',
                array( 'utilisateur' => $this->getUser() ,
                        'form' => $form->createView() ));

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Par défaut
    Bonjour,
    on comprends pas pourquoi tu parle d'ajax et au meme temps if($request->getMethod() == 'POST') dans ton controlleur !!
    c'est normal qu'il va rediriger vers le dernier return .

  3. #3
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Août 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2016
    Messages : 21
    Par défaut
    Si j'enlève l'ajax :

    #Code du pop-up
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <div class='modal'>
        <div class='modal-dialog'>
            <div class='modal-content'>
                <div class='modal-header'>
                    <div class="row">
                        <div class="col-sm-offset-11">
                            <button class='btn btn-default' data-dismiss='modal'>Fermer la fenêtre</button>
                        </div>
                    </div>					
                </div>
                <div class='modal-body'>
                    {{ render(controller('UtilisateurBundle:Profil:index')) }}
                </div>
            </div>
        </div>
    </div>
    #Code JS:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $('.a-profil').click(function (e) {
        e.preventDefault();
        $('.modal')
            .modal('show')
            .addClass('modal-profil');
    });
     
    $('.a-modifier').click(function (e) {
        e.preventDefault();
        $('.modal-body')
            .empty()
            .html('{{ render(controller("UtilisateurBundle:Profil:index")) }}');
    });
    Mais j'ai l'erreur suivante :
    Uncaught SyntaxError: Invalid or unexpected token
    à la ligne 12 du code JS

  4. #4
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    pour info, le test AJAX est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                    if ($request->isXmlHttpRequest()) {

  5. #5
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Août 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2016
    Messages : 21
    Par défaut
    @dukoid : Quand je fais ça, les données ne s'affichent plus dans les champs

    EDIT:
    les données s'affichent sur une page à part, mais pas sur le pop-up

  6. #6
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    voilà ma requete ajax qui envois un formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                        e.preventDefault();                   // on empêche l'envoi du formulaire par le navigateur
                        $.ajax({
                            type:"POST",
                            data: $(this).serialize(),        // les données du formulaire
                            url:"{{ url('vers_action_controller_req_ajx') }}",
                            cache: false,
                            success: function( msg ){
    ...
    ...
     
                            }
                        });
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
        /**
         * @Route("/req-ajx", name="vers_action_controller_req_ajx")
         */
        public function instanceReqAjxAction(Request $request) {
    
                if ($request->isXmlHttpRequest()) {
    
    .... traitement du formulaire de façon classique ...
    
      $reponse = tu envois la reponse que tu veux sous un format String
    
    
    $reponse =  tu peux aussi utiliser une commande PHP pour recuperer le contenu HTML d'un render...    google est ton ami
    
    
                    $response = new Response( $reponse );
                    $response->headers->set('Content-Type', 'application/json');
                    return $response;



    remarque : c'est dans le controller que tu dois rendre la page profil dans une variable que tu passes ensuite à la vue

Discussions similaires

  1. [1.x] formulaire dynamique avec ajax
    Par belgacem.tlili dans le forum Symfony
    Réponses: 1
    Dernier message: 29/03/2010, 22h05
  2. Réponses: 13
    Dernier message: 08/02/2007, 17h05
  3. Charger une liste dynamiquement avec AJAX
    Par macra dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 20/10/2006, 21h39
  4. Formulaire Dynamique Avec Struts
    Par tarakakik dans le forum Struts 1
    Réponses: 1
    Dernier message: 24/08/2006, 13h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo