我想替换:
{{ form_errors(form.name) }}
{{ form_widget(form.name, { 'attr': {'placeholder': 'Nom'} }) }}
人:
{{ form.name|field('Nom') }}
我怎么能这样做?我尝试在Twig扩展中执行此操作,但我无法访问form_widget函数。
修改:我可以使用form.name
属性(包括父窗体)来实现,但我会重复使用symfony代码,这将是一个非常难看的大黑客
答案 0 :(得分:2)
如果你让我将attr移动到你的表单类,那就更有意义了:
class SomeForm extends AbstractType {
//.....
$builder->add('name', 'text', array('attr' => array('placeholder'=>'Nom')));
}
由于我猜您需要为某些字段进行自定义渲染,因此您可以查看:
您还可以创建一个新类型并按照此处的说明对其进行自定义:
http://symfony.com/doc/2.0/cookbook/form/form_customization.html#what-are-form-themes
您甚至可以更改默认的呈现方式,并让symfony默认使用字段的标签字符串呈现占位符标记(全局启用表单主题的详细信息由上面引用的链接覆盖):
{% block text_widget %}
{% set type = type|default('text') %}
<input type="text" {{ block('widget_attributes') }} value="{{ value }}" />
{% endblock field_widget %}
{% block widget_attributes %}
{% spaceless %}
{% for attrname,attrvalue in attr %}{{attrname}}="{{attrvalue}}" {% endfor %} placeholder="{{ label|trans }}"
{% endspaceless %}
{% endblock widget_attributes %}
{% block form_row %}
{% spaceless %}
<div class="my-class">
{{ form_errors(form) }}
{{ form_widget(form) }}
</div>
{% endspaceless %}
{% endblock form_row %}
因此,您将使用symfony提供的主题将自己限制为form_row(form.name)。 Symfony的aproach对我来说看起来“非常”干/坏。 希望它有所帮助。