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 AJAX [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 36
    Par défaut Formulaire dynamique AJAX
    Bonjour,

    J'aimerais alimenter un menu déroulant en fonction de la valeur d'un champ précédemment saisi.
    Sachant que le framework permet d'implémenter les champs du formulaire avec une classe php associée par exemple "AnnonceForm.php".

    Je ne sais pas comment faire pour intégrer AJAX et appeler ces différents champs qui sont appelés dans la classe du formulaire.

    Par exemple :
    -> Une liste déroulante qui contient la liste des régions.

    -> Une autre qui contient la liste des départements.

    En fonction de la région choisit, la deuxième liste générera les départements associés.

    Sachant que j'ai déjà 2 tables renseignées dans ma base comportant la liste des régions et de départements.

    Merci de m'expliquer la procédure ,sinon me proposez un tutoriel qui permet de faire cette manipulation avec Symfony bien sur.

    Merci d'avance pour vos précieux conseils.

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Tu demandes beaucoup... faudra te mouiller un peu sur le coup.

    Il n'y a pas d'objet symfony qui permettent de réaliser cette double cascade sans avoir à ouvrir le moteur.

    Le mieux est de faire un formulaire qui tourne dans un premier temps sans JS. Histoire que ceux qui n'ont pas de JS activé arrivent à gérer ton application.

    Ensuite, d'écrire du code (avec jquery probablement comme framework JS) pour faire les demandes de modification de la liste à symfony. Après, c'est à toi de voir si tu veux que symfony génère la liste avec tous le code HTML et le remplacer dans la page, ou juste te retourne les départements pour la région sous forme JSON et ton code JS fait le remplacement.

    Il (ton code) peut aussi masquer les boutons nécessaire à la page sans JS.

    Symfony va te simplifier la vie dans le traitement des requêtes JS. Et dans les possibilités de factorisation du code.

    Tu as des exemples dans la documentation de symfony sur le site de sensio, en français (les exemples, pas le site). Il ne sont pas exactement ce que tu demandes, mais donnent de bonnes bases.

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 36
    Par défaut
    Salut,

    Merci pour ta réponse mais en fait je que je cherche c'est "pour faire les demandes de modification de la liste à symfony" c'est ça en fait car les déclarations sont bien faites dans les classes de formulaires comment je ferai appel à ces derniers dans le JS ?

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Je ne vois pas trop comment expliquer cela en une réponse.

    As-tu déjà fais de l'ajax, du JS ? As-tu déjà utilisé jquery ?

    Il faut lier du code jquery au changement de la valeur de la première liste. Ensuite récupérer les données en affichant un symbole pour prévenir l'utilisateur que l'ordi travail pour lui. Puis mettre en forme et afficher.

    Et côté symfony, il faut une action qui va récupérer les données (le code pour récupérer la liste peut être partagé) et les renvoyer.

    Après, si tu n'as jamais fait de JS ni de discutions entre la couche JS et une application PHP, il faudrait, peut-être, commencer à ce pencher sur les tutoriels correspondants. Vu que je n'ai aucune idée de ton niveau, je ne sais pas trop quoi dire d'autre.

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 36
    Par défaut
    Oui en fait je travaille je suis débutant j'ai jamais fait d'AJAX c'est pour ça.
    Merci en tout cas.Je vais continuer mes recherches.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 36
    Par défaut Integration de l'AJAX
    Bonjour,

    J'ai essayé d'intégrer AJAX en procédant comme suit :

    J'ai rajouté la route suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # routing.yml
    ...
    ajax_departement:
      url:   /ads/departement
      param: { module: ads, action: ajaxDepartement }
    ...
    L'action suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // actions.class.php
     
      /**
       * requete ajax pour avoir la liste des déparements de la région
       *
       * @param sfWebRequest $request
       */
      public function executeAjaxDepartement(sfWebRequest $request)
      {
        $region = Doctrine::getTable('Region')->findOneById(1); // j'ai mis 1 pour tester sur la première region "Alsace"
        return $this->renderPartial('selectDepartement', array('region' => $region));
      }
    Et le partial :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // _selectDepartement.php
    <option value=""></option>
    <?php foreach($region->getDepartements() as $departement): ?>
    <option value="<?php echo $departement->getId() ?>"><?php echo $departement->getNom() ?></option>
    <?php endforeach; ?>
    Et finalement mon _form.php --> formulaire de l'annonce :

    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
     
    <?php use_stylesheets_for_form($form) ?>
     
    <?php use_javascript('jquery-1.4.4.min.js') ?> 
    <?php use_javascript('ajax_reg.js') ?> 
     
    <script language="javascript">
    $(document).ready(function(){
      $("#form_Region_id").change( function() {
        $.post("/ads/departement", { region: $(this).val() },
        function(data)){
          $("#form_Departement_id").html(data);
        });
      });
    });
    </script>
     
    <?php use_javascripts_for_form($form) ?>
    <?php echo form_tag_for($form, '@ads') ?>  
      <table id="job_form">
        <tfoot>
          <tr>
            <td colspan="2">
              <input type="submit" value="Preview your ad" />
            </td>
          </tr>
        </tfoot>
        <tbody>
          <?php echo $form['Categorie_id']->renderRow() ?>
     
          <?php echo $form['Region_id']->renderRow() ?>
    	  <?php echo $form['Departement_id']->renderRow() ?> 
     
    	  <?php //echo $form['Region']['Name']->renderRow() ?> <?php //bug ?>
     
    	  <?php echo $form['CodePostal']->renderRow() ?>
    	  <?php echo $form['Ville']->renderRow() ?>
    	  <?php echo $form['TypeAnnonce']->renderRow() ?>
    	  <?php echo $form['TitreAnnonce']->renderRow() ?>
    	  <?php echo $form['TexteAnnonce']->renderRow() ?>
    	  <?php echo $form['Prix']->renderRow() ?>
    	  <?php echo $form->renderHiddenFields() ?>
    	  <?php foreach ($form['newPhotos'] as $photo): ?>
          <?php echo $photo['caption']->renderRow() ?>
          <?php echo $photo['filename']->renderRow() ?>
          <?php endforeach; ?>
     
        </tbody>
      </table>
    </form>
    Cependant rien à changer j'ai même l'impression que le code ne prend même pas en considération le javascript que j'ai ajouté, quand j'essaie de mettre n'importe quoi ça bogue pas.
    Les valeurs des deux listes déroulantes n'ont pas changé.


    Merci de me corriger ou m'éclairer un peu.

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

Discussions similaires

  1. [AJAX] Formulaire dynamique
    Par kikou732 dans le forum AJAX
    Réponses: 0
    Dernier message: 26/12/2011, 22h23
  2. formulaire dynamique : ajax ?
    Par mikl86 dans le forum Services Web
    Réponses: 0
    Dernier message: 27/06/2011, 18h19
  3. formulaire dynamique, conception j'hésite PHP / AJAX /JS
    Par xavioche77 dans le forum Langage
    Réponses: 13
    Dernier message: 31/03/2011, 13h00
  4. [1.x] formulaire dynamique avec ajax
    Par belgacem.tlili dans le forum Symfony
    Réponses: 1
    Dernier message: 29/03/2010, 22h05

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