2011-08-31 3 views
3

Je veux rendre un formulaire. HTML pour une ligne de champ devrait ressembler à ceci:symfony2 formulaire modèle

<li class="text"> 
    <label for="fieldname"> 
    <div> 
    <input type="text" ... /> 
    </div> 
</li> 

lorsque le type de champ est texte, les li.class doivent être les mêmes.

je remplacer le bloc field_row:

{% block field_row %} 
{% spaceless %} 
    <li class="text"> 
     {{ form_label(form, label|default(null)) }} 
     {{ form_errors(form) }} 
     {{ form_widget(form) }} 
    </li> 
{% endspaceless %} 
{% endblock field_row %} 

mais comment remplacer la valeur de la classe?

+0

Je ne comprends pas la question: Voulez-vous remplacer dynamiquement la classe li lorsque le widget de formulaire est TextType ou voulez-vous ajouter un attribut de classe au widget de formulaire lui-même? – madflow

+0

oui. le 1. un. Je veux remplacer la classe li à "text", "numer", "largetext" ou "something_else" – Uwe

Répondre

0

Vous pouvez essayer de joindre un membre public à votre classe FormType (si présent ...) et l'appeler à partir du modèle de brindille.

Peut-être aussi le tableau des attributs d'un formulaire est disponible dans un modèle de brindille ...

class YourType extends AbstractType 
{ 
    public $class = 'text'; 

    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder->add('fieldname'); 
    } 
    //... 
} 

Et

{% block field_row %} 
{% spaceless %} 
    <li class="{{ form.class }}"> 
     {{ form_label(form, label|default(null)) }} 
     {{ form_errors(form) }} 
     {{ form_widget(form) }} 
    </li> 
{% endspaceless %} 
{% endblock field_row %} 
+0

Oui mais je veux quelque chose comme ceci:

  • ...
  • ...
  • Uwe

    0

    il suffit de remplacer le « champ » mot avec le nom du type vous voulez modifier

    Vous le faites comme ça pour les champs de texte, mais il est le même pour tout type:

    {% block text_row %} 
    {% spaceless %} 
        <li class="text"> 
         {{ form_label(form, label|default(null)) }} 
         {{ form_errors(form) }} 
         {{ form_widget(form) }} 
        </li> 
    {% endspaceless %} 
    {% endblock text_row %} 
    

    ou comme celui-ci pour textareas:

    {% block textarea_row %} 
    {% spaceless %} 
        <li class="textarea"> 
         {{ form_label(form, label|default(null)) }} 
         {{ form_errors(form) }} 
         {{ form_widget(form) }} 
        </li> 
    {% endspaceless %} 
    {% endblock textarea_row %} 
    

    L'important est le nom du bloc, il devrait être le même que le nom du type que vous voulez modifier. Le "field_row" est la valeur par défaut pour tous les types de champs s'il n'y a pas de nom correspondant exact. Cela fonctionne également pour les types de formulaire que vous avez définis vous-même (ceux qui héritent de AbstractType, c'est pourquoi il est important d'ajouter un nom à vos types de formulaire, voir http://symfony.com/doc/2.0/book/forms.html#creating-form-classes).

    Questions connexes