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 imbriqué dynamique


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Formulaire imbriqué dynamique
    Bonjour,

    je suis confronté à un problème pour un formulaire assez compliqué (que j'ai réussi à faire en php "classique" mais sous le framework sympfony2, je ne trouve pas...)
    Donc voilà, en gros c'est un formulaire pour enregistrer un produit en base de donnée. Cependant, et pour optimiser le tout, les produits étant de nature différentes, l'objet "produit" ne contient pas tous les champs d'informations possibles pour tous les produits, mais est à la place lié à des enregistrements d'objet Fields. (j'ai donc dans "produit" un manytoone avec un champs fieldsval qui contient des objet FieldValue (avec à l'intérieur l'id du produit, l'id du Field et la valeur).

    Ainsi pour mon formulaire, je veux d'abord choisir la catégorie de l'objet, puis les fields qui lui sont rattaché apparaissent sous forme d'input (ca j'arrive à le faire en ajax/JS) mais lorsque je fais le submit, symfony2 me met que j'ai des input en trop dans mon form (ce qui est normal vu que les input sont généré dynamiquement et n'apparaisse pas dans le produitType.)

    J'ai donc essayé des faire des formulaires imbriqués mais ca ne fonctionne pas du tout comme je l'aurai espérer

    dans mon ProduitType, j'ai ajouté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ->add('fields',  'collection', array('type' => new FieldValueType(),
                                                    'allow_add'    => true,
                                                    'allow_delete' => true,
                                                    'by_reference' => false))

    avec FieldValueType qui contient une valeur et l'id du Field
    mais à part faire comme dans l'exemple du tuto de la doc offi et ajouter ou supprimer ces champs en cliquant sur un bouton (ce qui ne m'intéresse pas), je n'arrive pas à faire ce que je souhaite.

    Je suppose qu'il faudrait que j'utilise du JS pour modifier dynamiquement le "data-prototype" généré car il contient tout les input et tout mais celui-ci est tellement illisible à mes yeux que je suis un peu perdu... Il faudrait que je puisse modifier les labels des input générés et mettre le champ "idfield" en hidden, ainsi qu'une valeur par défaut selon le field.

    Bref, ca fait un peu de temps que je me prend la tête avec ca et j'hésite fortement à simplement laisser tomber mon "produitType" et faire un formulaire à l'ancienne...

    Merci par avance pour les réponses s'il y en a =)

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,
    Je suppose qu'il faudrait que j'utilise du JS pour modifier dynamiquement le "data-prototype" généré car il contient tout les input et tout mais celui-ci est tellement illisible à mes yeux que je suis un peu perdu
    On peut toujours personaliser les vues des champs de formulaire même les prototypes, tu peux t'inspirer de ce code:
    https://github.com/beberlei/AcmePizz...ndex.html.twig

    Pour le reste il te faudra effectivement de l'ajax,
    sur le onChange du champ categorie,
    récupérer la liste des champs possibles pour cette catégorie,
    puis coté client vider les champ "fieldValue", et les récréer en js en remplissant le champ idField avec les idFields récupérés.
    Tu n'as effectivement pas besoin des boutons "ajouter/supprimer", mais il faut garder les options "allow_add" et allow_delete" de ton FormType

  3. #3
    Membre expérimenté 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 : 36
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Je pense que tu es sur la bonne voie en utilisant le type 'collection'.

    Effectivement la doc officielle est assez complète pour l'ajout et la suppression d'un champ dans la collection (encore que le système de renommage des champs de la doc officielle est un peu bancal).

    Si j'ai bien compris c'est le data-prototype qui te chagrine : tu as la possibilité de surcharger et de créer tes propres widgets de rendu html.

    Ainsi lorsque tu voudras afficher ton form (quelque chose qui ressemblera approximativement à ce qu'il y a ci-dessous) tu auras la possibilité de surcharger form_widget (celui de la boucle et celui qui est dans ton data-prototype) et à l'intérieur de réaliser le template de ton choix et même d'avoir un rendu différent en fonction de la valeur de tes champs dans ton form.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <ul class="collection" data-prototype="{{ form_widget(form.items.vars.prototype)|e }}" >
        {% for item in form.items %}
            <li>{{ form_widget(materiel) }}</li>
        {% endfor %}
    </ul>
    Je te laisse faire un tour sur cette partie qui explique comment personnaliser le rendu d'un form field.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci à vous deux

    J'essaie cela dès que possible et je repasserai faire un petit tour ici.

Discussions similaires

  1. Réponses: 8
    Dernier message: 06/07/2006, 08h19
  2. Réponses: 1
    Dernier message: 03/07/2006, 17h47
  3. [ JSP ] Formulaire tres dynamique avec base de données.
    Par Dukedoom dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 08/06/2006, 09h19
  4. formulaire imbriqué
    Par jani dans le forum Langage
    Réponses: 9
    Dernier message: 18/01/2006, 15h40
  5. formulaire tabulaire dynamique
    Par whoesnext dans le forum IHM
    Réponses: 1
    Dernier message: 15/12/2005, 17h48

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