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 :

sf2.6 : formulaire ajax [2.x]


Sujet :

Symfony PHP

  1. #1
    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 sf2.6 : formulaire ajax
    Bonjouuuuuuuuuuuuuuur les amis,


    j'envois un formulaire en ajax de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                var url = $("form").attr("action");
     
                $.post( url, {
                    type: "POST",
                    data: $(this).serializeArray(), 
                    cache: false
                },function(data){               
                     // retour js
                });
    dans mon controller, pour récupérer toutes les données du formulaire voici ce que je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     $params = $request->request->all();
    le résultat de $request->request->all()
    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
    39
    40
    41
    42
    43
    44
    45
     
    array(3) {
      ["type"]=>
      string(4) "POST"
      ["data"]=>
      array(5) {
        [0]=>
        array(2) {
          ["name"]=>
          string(16) "form_groupe[nom]"
          ["value"]=>
          string(6) "DEVIS2"
        }
        [1]=>
        array(2) {
          ["name"]=>
          string(24) "form_groupe[type_action]"
          ["value"]=>
          string(11) "EDIT_GROUPE"
        }
        [2]=>
        array(2) {
          ["name"]=>
          string(27) "form_groupe[application_id]"
          ["value"]=>
          string(1) "2"
        }
        [3]=>
        array(2) {
          ["name"]=>
          string(22) "form_groupe[groupe_id]"
          ["value"]=>
          string(2) "64"
        }
        [4]=>
        array(2) {
          ["name"]=>
          string(21) "form_groupe[droit_id]"
          ["value"]=>
          string(0) ""
        }
      }
      ["cache"]=>
      string(5) "false"
    }


    le soucis c'est que $request->request->all() me retourne un tableau avec les données mais ils sont difficilement accessible d'un point de vue programmatique.
    car je pourrai faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $nom = $params["data"][0]["value"]
    mais je trouve ça zarbi !


    donc ma question, il y a t'l une façon de faire assez cool pour accéder à ces données ?


    je précise qu'avec handleRequest ça ne fonctionne pas en ajax sous sf2.6

  2. #2
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Hello, pourquoi ça ne fonctionnerait pas en ajax avec handleRequest en 2.6 ?

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 168
    Par défaut
    dans la méthode js c'est "serialize" et le handleRequest fonctionnera ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $(document).ready(function(){
                var $form = $('.form');
                $form.on('submit',function(event){
                    event.preventDefault();
                    $.post( $(this).attr('action'), {
                        type: $(this).attr('method'),
                        data: $(this).serialize(),
                        cache: false
                    },function(response){
                        //...
                    });
                })
            });

  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
    goagonba, avec: $(this).serialize(),
    j'avais essayé et je viens encore d'essayé et toujours pas



    NICO_F, eh bien c'est ce que je me pose la question depuis 3 jours.


    j'avais fais ainsi et je viens encore de le faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            if ($request->isXmlHttpRequest() && $request->getMethod() == 'POST') {  
                $form_data = $this->createForm(new DataGroupeType());             
                $form_data->handleRequest($request);
    var_dump($form_data);      // dans l'objet $form_data il y a bien les données du formulaire
     
                $data = $form_data->getData();   
    var_dump($data);              //   $data vaut NULL

    $data reste à NULL

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 168
    Par défaut
    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
     
    {% extends 'base.html.twig' %}
     
    {% block body %}
     
        {{ form(form,{attr:{class:'form'}}) }}
     
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
     
        <script>
            $(document).ready(function(){
                var $form = $('.form');
     
                $form.on('submit',function(event){
     
                    event.preventDefault();
     
                    $.post(
                        $(this).attr('action'),
                        $(this).serialize(),
                        function(response){
                            console.log(response);
                        }
                    );
                });
     
            });
     
        </script>
     
    {% endblock %}
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    <?php
     
    namespace AppBundle\Controller;
     
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\HttpFoundation\JsonResponse;
    use Symfony\Component\HttpFoundation\Request;
     
    class DefaultController extends Controller
    {
        /**
         * @Route("/", name="homepage")
         * @Method("GET")
         */
        public function indexAction()
        {
     
            $form = $this->getForm();
            return $this->render('default/index.html.twig',array('form'=>$form->createView()));
        }
     
        /**
         * @Route("/check",name="submit")
         * @Method("POST")
         */
        public function submitAction(Request $request)
        {
            $form = $this->getForm();
     
            $form->handleRequest($request);
     
            if($form->isValid()){
     
                return new JsonResponse(array('text'=>$form->getData()));
            }
     
            $errors = array();
            foreach($form->getErrors(true) as $error){
                $errors[] = $error->getMessage();
            }
     
            return new JsonResponse(array('errors'=>$errors,'data'=>print_r($form->getData(),true)));
     
     
        }
     
        protected function getForm()
        {
            return $this->createFormBuilder(array(),array(
                'action'=>$this->generateUrl('submit')
            ))
                ->add('text','text')
                ->add('submit','submit')
                ->getForm();
        }
    }

    un truc dans le genre non ?

  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
    oui comme toi sauf que moi j'utilise un formType et toi un createBuilder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     $form_data = $this->createForm(new DataGroupeType());  
    et toi:
     $form_data = $this->getForm();

    tu crois que c'est ça qui peut poser problème ?

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 168
    Par défaut
    Hein ?

    1 : la méthode post de jquery n'est pas la même ! (regardes les paramètres !!!)

    2 $this->getForm retourne un Form, (tu as juste a regarder a la fin de la class quoi )

  8. #8
    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
    si je ne precise pas type: "POST" dans le post de jquery
    il me fais un GET à la place.

    comment ça peut marcher chez toi ?

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 168
    Par défaut
    Alors si je fais un :
    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
     
    <script>
            $(document).ready(function(){
                var $form = $('.form');
     
                $form.on('submit',function(event){
     
                    event.preventDefault();
     
                    $.post(
                        $(this).attr('action'),
                        $(this).serialize(),
                        function(response){
                            console.log(response);
                        }
                    );
                });
     
            });
     
        </script>
    j'ai un POST .


    la doc de JQuery est plutôt clair sur ce point :
    Description: Load data from the server using a HTTP POST request.
    http://api.jquery.com/jquery.post/

  10. #10
    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
    t'es un GÉNIE mec !!!!!!



    en fait je viens de trouver pourquoi, ceci grâce à :
    event.preventDefault();

    qui bloque l'envois par celui de jQuery.
    (j'avais oublié ce détail )


    MERCI A VOUS 2 !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. formulaire AJAX + PHP aucune action
    Par akrogames dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/05/2008, 15h48
  2. Validation formulaire Ajax et Pop-up
    Par PiXeL' dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 06/05/2008, 10h42
  3. [Prototype] Formulaire ajax
    Par Hesiode dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 23/01/2008, 14h08
  4. Récupération de donnée formulaire AJAX vers PHP
    Par Starbug dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/10/2007, 18h38
  5. problème encodage avec formulaire ajax
    Par gyome314 dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 21/06/2007, 13h14

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