Contactez-nous
Kitpages
17 rue de la Frise
38000 Grenoble
tel : 04 58 00 33 81
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.

plv)
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 }}Pour récuperer la value du champs id de $form : {{ form.get('value').id }}