6

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

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

这是文本字段配置:

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

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

4

6 回答 6

8

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

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

享受!

于 2011-09-05T15:29:20.937 回答
4

在模板中执行此操作的最简单方法 - 将第二个参数传递给form_label

<div class="form-group">
    {{ form_label(form.email, 'Email:') }} <- this row
    {{ form_widget(form.email, {'attr': {'class': 'form-control'}}) }}
</div>
于 2015-12-22T14:36:07.100 回答
3

对于偶然发现这个希望得到答案的 Symfony 2.1 用户的答案,几乎有 @rikinadhyapak 答案。

如果您在 buildForm 方法中扩展了 FOSUserBundle 等捆绑包的 FormType 类:

    $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
于 2013-02-05T02:43:30.833 回答
1

老实说,我会推迟几周学习 Symfony 表单组件。Symfony 开发人员正在对 Form API 进行大修。据我了解,大部分已经完成,并且已经向主存储库提交了一个拉取请求

于 2011-04-15T04:39:39.820 回答
1

对于 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

});

但我会避免这种情况。

于 2016-04-10T22:58:52.973 回答
0

它被添加到 Symfony2 beta2 http://groups.google.com/group/symfony-users/browse_frm/thread/c66165093665809

于 2011-05-05T08:53:26.230 回答