【问题标题】:symfony2 form templatingsymfony2 表单模板
【发布时间】:2011-08-31 11:00:22
【问题描述】:

我想渲染一个表单。字段行的 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 %}

但是如何替换类值呢?

【问题讨论】:

  • 我不明白这个问题:你想在表单小部件是TextType时动态替换li类还是要给表单小部件本身添加一个类属性?
  • 是的。 1. 一。我想将 li 类替换为“text”、“numer”、“largetext”或“something_else”

标签: webforms symfony twig


【解决方案1】:

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

也许表单的属性数组也可以在树枝模板中访问...

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

【讨论】:

  • 是的,但我想要这样的东西:
  • ...
  • ...
【解决方案2】:

只需将“字段”一词替换为您要修改的类型的名称即可。

你对文本字段这样做,但对任何类型都是一样的:

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

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签