Contactez-nous

Kitpages
17 rue de la Frise
38000 Grenoble
tel : 04 58 00 33 81

Par Philippe Le Van (twitter accountplv) Dernière mise à jour : 25 avril 2012

Aide mémoire form / symfony2

Introduction

Quelques points qu'on a du mal à retrouver dans les forms symfony2

Quelques fonctions pratiques

<!-- afficher une valeur d'un des champs du formulaire -->
{{form.vars.value.FIELD}}

<!-- récuperer la liste des enregistrements d'un champ collection dans un formulaire -->
{{form.champCollection.vars.value}}

Modifier la présentation d'un form (twig)

La présentation des formulaires symfony2 est par défaut dans le twig suivant :

vendor/symfony/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig

On peut modifier certains éléments de cette présentation en créant notre propre twig.

Le fichier suivant : AppSiteBundle:Form:form_version_layout.html.twig modifie la présentation d'un fieldRow pour ajouter un message d'aide en cas de besoin.

<!-- file AppSiteBundle:Form:form_version_layout.html.twig -->
{% block field_row %}
{% spaceless %}
    <div>
        {{ form_label(form, label|default(null)) }}
        {{ form_errors(form) }}
        {{ form_widget(form) }}
        {% if help is defined %}
            <div class="kit-catalog-form-help">
                {{ help|raw }}
            </div>
        {% endif %}
    </div>
{% endspaceless %}
{% endblock field_row %}

Et dans le twig qui affiche notre formulaire, il suffit d'ajouter :

<!-- Pour utiliser notre nouvelle présentation dans un formulaire : !-->
{% form_theme form 'AppSiteBundle:Form:form_version_layout.html.twig' %}

Variables de formulaires

id L'attribut HTML id qui est rendu
name Le nom du champ( exemple title) - mais pas l'attribut HTML name qui est accessible par la variable full_name
full_name L'attribut HTML name qui est rendu
errors Un tableau de toutes les erreurs attachées à ce champ (ex? form.title.errors). Notez que vous pouvez utiliser form.errors pour déterminer si un champ est valide, il ne contient que les erreurs "globales": certains champs peuvent avoir des erreurs Sinon, utilisez la variable valid
valid Retourne true ou false selon que le formulaire entier est valide
value La valeur qui sera utilisé au moment du rendu (couramment l'attribut HTML value)
read_only Si true, readonly="readonly" est ajouté au champ
disabled Si true, disabled="disabled" est ajouté au champ
required Si true, un attribut required est ajouté au champ pour activer la validation HTML5. De plus, une classe required est ajoutée au libelé.
max_length Ajoute un attribut HTML maxlength à l'élément
pattern Ajoute un attribut HTML pattern à l'élément
label La chaine de caractère libelée qui sera rendue
multipart If true, form_enctype will render enctype="multipart/form-data". This only applies to the root form element.
attr Un tableau clé-valeur qui sera rendu pour les attributs HTML pour le champ
label_attr Un tableau clé-valeur qui sera rendu pour les attributs HTML sur le libelé
compound Détermine si l'emplacement est un groupe de champs (par exemple, un champ choice, qui est un ensemble de case à cocher)
{% block form_label %}
  {{ name }}
  <label{% for attrname, attrvalue in label_attr %} {{ attrname }}="{{ attrvalue }}"{% endfor %}>{{ label|trans({}, translation_domain) }}</label>
{% endblock form_label %}

Conclusion

N'hésitez pas à mettre des messages dans les commentaires pour nous aider à compléter le tuto.

Commentaires

Ajouter un commentaire
Pour l'entity passé au form
{{form.vars.value.FIELD}}
Sinon il faut mieux utiliser ça
{{  form.FIELD.vars.value }}
attention, utiliser get() est déprécié depuis la 2.2, sera supprimé dans la 2.3,   il faut dans ce cas  écrire  {{ form.vars.id }}
Récupérer la value d'un champs formulaire
Pour récuperer la value du champs id de $form : 
{{  form.get('value').id }}