Symfony表单集合渲染

po_taka

我正在使用symfony 2.3,我的表单的字段类型为“ collection”

树枝中的可视化代码:

{% for field in form.fields %}
    {{ form_row(field.name) }}
{% endfor %}

一切正常,期望form.fields为空。然后在树枝循环中看不到任何东西,女巫很好。但是在表单的末尾有元素“ form.fields”的“标签”。仅标签。

解决方法:

    {% for field in form.fields %}
        {{ form_row(field.name) }}
    {% endfor %}
    <div class="hidden">
        {{ form_row(form.fields) }}

如果有元素,它们将在循环中呈现。{{form_row}}将为空,因为所有元素都在上面的循环中进行了迭代。但是,如果form.fields为空,则存在“ hidden”(在div中)标签。

我想念的是什么!?为什么会这样呢?

隐藏的div内容:

<div class="form-group"><label class="col-sm-2 control-label required">name</label><div class="col-sm-10"><div id="my-id" data-prototype=""></div></div></div>

生成器配置:

$builder->add(
    'fieldDataMappers',
    'collection',
    array(
        'type' => new FieldDataType(),
        'allow_add' => true,
        'allow_delete' => true,
        'by_reference' => false,
    )
);
giosh94mhz

正如您已经正确猜到的那样,Symfony TwigBridge会跟踪呈现的内容和未呈现的内容。这很有用,因为有一个称为的函数form_rest(form),该函数对于打印隐藏的表单字段特别有用,并且可以防止“大木星!我忘记打印该字段!”。片刻。:)您通常会form_rest在表单末尾的“提交”按钮之前找到

还应考虑该集合是复合表单类型,其中包含子表单的变量列表。for不触发循环时,由于表单类型为空,因此调用以{{ form_row(form.fields) }}打印出收集表单类型。默认情况下,这将打印(您已经猜到了)集合标签和一个空的div。另一方面,当集合不为空时,Symfony会将集合视为已渲染,因为所有子代均已渲染(请参见FormView :: isRendered)。

您可以查看Symfony标准主题form_div_layout.html.twig,特别是块form_row(显示标签打印)和form_widget_compound(thediv和for循环)。

因此,如果您只需要隐藏标签(快速又脏,有些div仍然存在),请使用:

$builder->add(
    'fieldDataMappers',
    'collection',
    array(
        'type' => new FieldDataType(),
        'label' => false,
        'allow_add' => true,
        'allow_delete' => true,
        'by_reference' => false,
    )
);

或者更好的是,仅输出整个集合窗口小部件,而不需要行:

{{ form_widget(form.fieldDataMappers) }}

甚至更好的是,您可以使用以下命令打印整个收藏集:

{{ form_row(form.fieldDataMappers) }}

...然后添加一个Twig主题以使用类似以下内容的自定义集合输出(请注意名称语法和丢失的form_label调用):

{% block collection_row -%}
    <div>
        {{- form_errors(form) -}}
        {{- form_widget(form) -}}
    </div>
    <div class="hidden">Something here?</div>
{%- endblock collection_row %}

希望对您有所帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章