2011-04-05 131 views
6

我对symfony2 Field组件有一点点但不愉快的问题。例如,我想输出表单字段的数组中的树枝模板:symfony2 textfield自定义标签

{% for field in form %} 
    {{ form_label(field) }}: {{ form_field(field) }} 
{% endfor %} 

这里是文本字段配置:

$field = new TextField('FieldName', array(
    'label' => 'MyCustomLabel', 
)); 

但不幸的是,当引擎呈现此输出得到“字段名”为标签而不是'MyCustomLabel'。我不会有问题,如果我输出表单域不在for(在这种情况下,我可以在模板中为每个字段添加一个标签)。但是脚本在执行之前并不知道表单字段的数量和配置。所以,我需要为场渲染实现循环方法。我也想留在树枝符号...我会很高兴有一个很好的建议:)

+0

你解决了吗?我如何设置自定义标签? – umpirsky 2011-04-08 19:10:34

回答

7

添加如果要更改标签,比按照步骤。 1)创建表单类。 2)add('fieldName',null,array('label' => 'My New Label:'))

请不要更改fieldName,但您可以在数组中使用Label进行播放。

享受!

2

对于Symfony 2.1用户来说,这个问题的答案绊倒了这个希望得到答案的地方,这几乎就是@rikinadhyapak的答案。

,如果你已经扩展了FormType类像FOSUserBundle一些捆绑的,在你的buildForm方法:

$field = $builder->get('username');   // get the field 
    $options = $field->getOptions();   // get the options 
    $type = $field->getType()->getName();  // get the name of the type 
    $options['label'] = "Login Name";   // change the label 
    $builder->add('username', $type, $options); // replace the field 
3

做模板最简单的方式 - 通过第二个参数form_label

<div class="form-group"> 
    {{ form_label(form.email, 'Email:') }} <- this row 
    {{ form_widget(form.email, {'attr': {'class': 'form-control'}}) }} 
</div> 
0

对于Symfony 2.3,您可以使用以下事件替换标签:

$builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) 
{ 
    $form = $event->getForm(); 
    $object = $event->getData(); 

    $field = $form->get('fieldname'); 
    $config = $field->getConfig(); 
    $options = $config->getOptions(); 
    $options['label'] = 'New label'; // change the label 
    $form->add($field->getName(), $config->getType()->getName(), $options); // replace the field 

}); 

但我会避免这一点。