symfony2形式模板

时间:2011-08-31 11:00:23

标签: webforms symfony twig

我想渲染一个表单。字段行的HTML应如下所示:

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

但如何替换类值?

2 个答案:

答案 0 :(得分: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 %}

答案 1 :(得分: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 %}

或者喜欢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 %}

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

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