我需要我的symfony2 / twig表单符合某个条件:所有表单行必须与此类似:
{% block form_row %}
<div class="CONSTANT_CLASS class_based_on_field_type class_based_on_error">
{{ form_label(form) }}
{{ form_widget(form) }}
...
</div>
{% endblock form_row %}
请注意,我需要在form_row块中获取字段类型。唉,字段类型仅在窗口小部件级别定义。
我绝对需要一种方法让我的form_row知道它正在处理什么类型的字段。
所以我想最好以某种方式覆盖form_row
枝条功能。
默认树枝功能可以在哪里被覆盖?怎么可以这样做?
请记住,这不是customizing a form。我需要知道如何为现有字段类型添加现有form variables。
@nifr:
你的关键答案似乎是{% set typeClass ... %}
。但模板的任何位置都没有定义的变量text
。看一下158ff行的form_div_layout.html.twig,我认为类型确实只在form_widget级别设置,因此封装在那里。这意味着使用form_row级别的类型将导致给定的默认值(因此在测试时我发生了这种情况)。如果你能证明这是错的,我会很乐意接受你的回答。
答案 0 :(得分:0)
如何覆盖Twig中的form_row块按字段类型添加属性?
虽然你说这不是关于形式定制,但它可以通过它来实现...快速介绍其他人现在阅读。
可以找到默认的symfony twig表单扩展名here。
可以在Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig找到默认的树枝形式主题。
有关如何覆盖表单的一般信息可以在本书的如何Customize Form Rendering章节中找到,但我将很快对此进行总结。
form_row默认
{% block form_row %}
{% spaceless %}
<div>
{{ form_label(form) }}
{{ form_errors(form) }}
{{ form_widget(form) }}
</div>
{% endspaceless %}
{% endblock form_row %}
覆盖表单级别
将其添加到您要自定义的表单模板中:
{% form_theme form _self %}
如果您想将{%block form_row%}放入另一个包/模板中,请使用:
{% form_theme form 'AcmeDemoBundle:Form:fields.html.twig' %}
现在在form_theme声明之后插入自定义form_row块或将其放入指定模板(在我们的示例中,这将是 AcmeDemoBundle:Form:fields.html.twig )。
在我的示例中,如果表单行中存在错误,则添加类“错误”,另一个类名称,即当前字段类型的类型名称。
{% block form_row %}
{% spaceless %}
{# set class to 'error' if errors exist #}
{% set attr = attr|merge({'class': attr.class|default('') ~ (errors|length > 0 ? ' error' : '') }) %}
{% set typeClass = ' ' ~ type|default('text') %}
{#
you could also implement a logic matching input types with an array of their
desired classname-representations here.
#}
{% set attr = attr|merge({'class': attr.class|default('') ~ type) }) %}
<div class="{% for class in attr.class %}{{ class }}{% endfor %}{{ typeClass }}">
{{ form_label(form) }}
{{ form_errors(form) }}
{{ form_widget(form) }}
</div>
{% endspaceless %}
{% endblock form_row %}
如果您想在系统范围内应用form_row块,请将 AcmeDemoBundle:Form:fields.html.twig 添加到twig.templating.form.resources中!
# app/config/config.yml
framework:
templating:
form:
resources:
- 'AcmeDemoBundle:Form'
答案 1 :(得分:0)
在form_row块中,您可以使用:
{{form.vars.block_prefixes [2]}}
form.vars.block_prefixes为您提供了一个包含更多信息的数组,它可能随版本而变化。但是从我到目前为止看到的它总是索引2