2011-08-31 63 views
3

我想渲染一个表单。一个字段行的HTML应该是这样的:symfony2表单模板

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

当字段类型是文本li.class必须是相同的。

我覆盖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 %} 

,但如何更换类值?

+0

我不明白这个问题:当表单控件是TextType的时候,你想要动态地替换li类,还是想要为表单控件本身添加一个类属性? – madflow

+0

是的。 1.一个。我想将li类替换为“text”,“numer”,“largetext”或“something_else” – Uwe

回答

0

您可以尝试附加一个公共成员到您的FormType类(如果存在...)并从树枝模板中调用它。

也许也是一种形式的属性阵列可以在树枝模板访问...

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

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

而且

{% 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

是的,但我想要这样的内容:

  • ...
  • ... ...
  • Uwe

    0

    只是类型的名称替换“田”字你想修改。

    你不喜欢这样的文本字段,但它是任何类型相同的:

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

    或类似这样的文字区域:

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

    的重要组成部分,是块的名字,它应该与您要修改的类型的名称相同。如果没有完全匹配的名称,则“field_row”是所有字段类型的默认值。

    这也适用于自己定义的表单类型(从AbstractType继承的表单类型,这就是为什么向表单类型添加名称很重要,请参阅http://symfony.com/doc/2.0/book/forms.html#creating-form-classes)。