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 :

parcourir les éléments d'un formulaire dans twig [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 53
    Points : 62
    Points
    62
    Par défaut parcourir les éléments d'un formulaire dans twig
    Bonsoir à tous,

    je suis débutant sur symfony 2 et je butte sur un problème qui ne dois pas être bien compliqué mais sur lequel je n'arrive pas à avancer...
    je souhaiterais parcourir les éléments d'un formulaire edit (comme créé par défaut avec la commande CRUD) dans un template pour afficher l'ensemble des champs. L'objectif est de pouvoir réutiliser le template pour n'importe quel Objet (Entity) pour réaliser la partie administration du site.

    en code il s'agit de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    {{ form_row(edit_form.champA) }}
    {{ form_row(edit_form.champB) }}
    {{ form_row(edit_form.champC) }}
    par quelque chose du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    {% for row in entity %}
            <div>{{ form_row(edit_form[row]) }}</div>
    {% endfor %}
    (mais ca ne fonctionne pas comme ça). J'ai essayer de parcourir l'entity plutôt que le form mais je n'y arrive pas non plus...

    merci d'avance pour vos suggestions...

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    Ceci devrait fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    {% for field in edit_form %}
            <div>{{ form_row(field) }}</div>
    {% endfor %}
    Un petit si la réponse convient. Merci.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Pourquoi tu ne fais pas simplement comme ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{ form_widget(edit_form) }}
    Sinon tu as toujours les themes de formulaire, ca devrait je pense d'avantage d'intéresser :
    http://symfony.com/doc/2.0/book/forms.html#form-theming
    http://symfony.com/doc/2.0/cookbook/...omization.html

  4. #4
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 53
    Points : 62
    Points
    62
    Par défaut
    Merci RaptOR ta solution fonctionne (je ne maîtrise pas encore cd qu'il y a réellement dans ces variables et leur affichage par print_r est assez incompréhensible) Il me reste à enlever la ligne token...

    Guybrush113, je ne me sert pas de cette fonction car elle est moins souple, je veux pouvoir maitriser l'affichage ligne à ligne (notamment pour mettre le tout dans un tableau)

  5. #5
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 53
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par Guybrush113 Voir le message
    Pourquoi tu ne fais pas simplement comme ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{ form_widget(edit_form) }}
    Sinon tu as toujours les themes de formulaire, ca devrait je pense d'avantage d'intéresser :
    http://symfony.com/doc/2.0/book/forms.html#form-theming
    http://symfony.com/doc/2.0/cookbook/...omization.html
    en regardant d'un peu plus près il semble également que je puisse faire ce que je veux avec ces liens (merci ! ). Par contre ca ne me semble pas très pratique (pour mon cas : intégrer le formulaire dans un tableau)

  6. #6
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 53
    Points : 62
    Points
    62
    Par défaut
    en continuant mes recherches je me rends compte que ce qui me manque c'est de comprendre ce qu'il y a vraiment dans la variable $edit_form lorsqu'on fait :
    'edit_form' => $editForm->createView()

    je ne trouve rien d'un peu détaillé sur la question dans la documentation. Savez vous où on peut chercher ce type d'information ? J'en ai besoin pour retirer la ligne "token" qui apparait lorsque je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <table class="adm_defaut">
        <tr><th>Champ</th><th>Valeur</th></tr>    
        {% for field in edit_form %}
            <tr>
                <td>{{ form_label(field) }}</td>
                <td>{{ form_widget(field) }}</td>
            </tr>
        {% endfor %}
    </table>
    j'aimerai pouvoir faire quelque chose du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    {% for field in edit_form %}
        {% if field != "token" %}
        <tr>
            <td>{{ form_label(field) }}</td>
            <td>{{ form_widget(field) }}</td>
         </tr>
        {% else %}
             form_row(field)
        {% endif %}
    {% endfor %}
    mais je suis coincé sans doc complémentaire sur ce qu'il y a dans field

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Le field token sert pour la sécurité de tes formulaires, c'est tout de même mieux de le garder.
    Je ne sais pas comment le retirer, mais il me semble que c'est la fonction form_rest(form) qui le met en place.

    Sinon, tu peux désactiver l'utilisation du CSRF dans ton config.yml, je pense que ca devrait suffire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    framework:
        csrf_protection: false

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Points : 658
    Points
    658
    Par défaut
    La fonction form_rest() permet d afficher tout ce qui n a pas encore été affiché. Donc souvent, on oublie token... form_rest() va donc souvent afficher token... mais pas seulement.


    field contient bien beaucoup de choses concernant un champ.
    Si tu veux recuperer l id ou le name, il faut faire comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{ field.get('name') }}
    Donc ton test doit faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% if field.get('name') != "_token" %}
    Mais dernier point:
    Si tu vires le champ _token, ton formulaire ne se validera JAMAIS.
    Donc, tu dois plutôt désactiver la protection comme Guybrush113 te propose.
    Un petit si la réponse convient. Merci.

  9. #9
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 53
    Points : 62
    Points
    62
    Par défaut
    Merci à vous pour la solution.

    en fait je ne cherche pas à supprimer token mais juste à l'afficher en dehors du tableau pour ne pas avoir de case vide ou avec un champ "token".
    donc je garde la sécurité mais je l'affiche différemment

    ca semble très bien marcher !

    merci beaucoup...

    le code reconduit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        <table class="adm_defaut">
        <tr><th>Champ</th><th>Valeur</th></tr>    
        {% for field in edit_form %}
            {% if field.get('name') != "_token" %}
                <tr>
                    <td>{{ form_label(field) }}</td>
                    <td>{{ form_widget(field) }}</td>
                </tr>
            {% else %}
                {{ form_row(field) }}
            {% endif %}
        {% endfor %}
         </table>

  10. #10
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 53
    Points : 62
    Points
    62
    Par défaut
    Je continue mon projet de de standardisation des fichiers du CRUD, l'idée étant de pouvoir créer 4 templates twig de présentation (index, edit, new, show) valables pour toutes les entity du bundle.

    J'y suis presque, par contre ça ne fonctionne pour le moment qu'en définissant une variable enregistrant le nom de l'entity, en la passant au template et en utilisant ensuite des routes du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    path(nom ~ '_show' , { 'id': entity.id })
    (nom étant le nom de l'entity)

    cette solution n'est pas particulièrement pratique car elle oblige à modifier chaque controller pour transmettre le nom de l'entity au template.

    je souhaite donc remplacer "nom" par quelque chose du type entity.name ou entity.class . Quelqu'un sais-t-il ce qui peut marcher ?

  11. #11
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 53
    Points : 62
    Points
    62
    Par défaut
    je viens de me mettre à utiliser le debugger de Netbeans et ca me permet de faire un grand pas dans la compréhension de ce qui ce passe

    je me rends compte que ma dernière question n'a pas de réponse satisfaisante
    donc je ferme le sujet. Merci à tous !

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

Discussions similaires

  1. Afficher les éléments d'un formulaire un à un dans la vue
    Par brice97431 dans le forum Zend_Form
    Réponses: 1
    Dernier message: 22/08/2014, 23h23
  2. Parcourir les éléments dans TMainMenu
    Par kwekwe dans le forum Débuter
    Réponses: 6
    Dernier message: 07/08/2014, 09h12
  3. Afficher les éléments d'un json dans un formulaire
    Par DiverSIG dans le forum Ext JS / Sencha
    Réponses: 2
    Dernier message: 03/05/2012, 21h22
  4. parcourir tous les éléments de mon formulaire
    Par Henry9 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/08/2007, 13h22
  5. Afficher les élements d'un formulaire dans une autre fenetre
    Par BernardT dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/12/2005, 22h52

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