Symfony twig 如何将类添加到表单行

标签 symfony twig symfony-forms

我正在使用 Twig 在 Symfony 2.3 中构建一个项目。我想向表单行 block 添加一个类。我正在使用一个表单主题文件,其中包含:

{% block form_row %}
    <div class="form-row">
        {{ form_label(form) }}
        {{ form_widget(form) }}
        {{ form_errors(form) }}
    </div>
{% endblock %}

现在我的一些表单行我想添加一个额外的类 form-row-split .我不知道如何正确地做到这一点。我让它几乎工作的方式是:
{% block form_row %}
    {% set attr = attr|merge({'class': 'form-row' ~ (attr.class is defined ? ' ' ~ attr.class : '') ~ (errors|length > 0 ? ' error' : '')} ) %}
    <div {{ block('widget_container_attributes') }}>
        {{ form_label(form) }}
        {{ form_widget(form) }}
        {{ form_errors(form) }}
    </div>
{% endblock %}

(注意,我也留下了 error 类逻辑,因为它需要保留)。
然后在表单生成器中:
$builder
        ->add('first_name', 'text', array(
            'attr' => array(
                'class' => 'form-row-split'
            )
        ));

这几乎可以工作,但它在任何地方都添加了这个类,并将小部件 id 添加到行中!
<div id="myform_first_name" class="form-row form-row-split">
    <label for="myform_first_name">First name</label>
    <input id="myform_first_name" class="form-row-split" type="text" name="myform[first_name]">
</div>

我可以想到一些潜在的解决方案,但没有一个是漂亮或直接的。当然必须有一个简单的方法来做到这一点?

最佳答案

我所做的更简单(尽管可能不太干净?)。

通过字段的“数据”属性传递表单行的类:

// template.html.twig

{{ form_start(form) }}
    {{ form_row(form.field, {'attr': {'data-row-class': 'my-row-class'} }) }}
{{ form_end(form) }}

然后以这种方式在表单主题模板中处理它:
// form-theme.html.twig

{% block form_row -%}
    {% set row_class = attr['data-row-class'] | default('') %}
    <div class="{{ row_class }}">
        {{- form_label(form) -}}
        {{- form_widget(form) -}}
        {{- form_errors(form) -}}
    </div>
{%- endblock form_row %}

这给出了这个:
<form name="formName" method="post">
    <div class="my-row-class">
        <label for="formName_field">Field label</label>
        <input type="text" id="formName_field" name="formName[field]" data-row-class="my-row-class">
    </div>
</form>

关于Symfony twig 如何将类添加到表单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23011450/

相关文章:

symfony - Doctrine 事件监听器和软删除过滤器

php - 当邮件发送失败时,SwiftMailer 会默默地忽略错误

symfony - 只是尝试安装/配置symfony2

php - 尝试提交表单路径以及如何将表单值传递到 URL

php - 测试 Twig 中的变量相等性

symfony - 删除或自定义嵌入的表单标签

javascript - 在jquery中动态获取输入值

javascript - 在 Twig 文件中导入 Twig 文件

symfony - 如何从 PHP 预填充 EntityType 类型的字段

php - 在 Formbuilder::add() 中配置 EntityType 时访问类的属性和方法