开发者

symfony2 textfield custom label

I had a little but unpleasant problem with symfony2 Field component. For example, I would like to outpu开发者_StackOverflow社区t array of form fields in twig template:

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

And here is text field configuration:

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

But unfortunately when engine renders this output i get 'FieldName' as label instead of 'MyCustomLabel'. I would not have problems if i outputting form fields not in for (in that case i can just add a label in template for each field). But the script doesn't know certain quantity and configuration of form fields before execution. So, I need to implement cycle method for field rendering. And I also want to stay in twig notation...I will be pleased for a good advise :)


If you want to change the label, than follow the steps. 1) Create form class. 2) add('fieldName',null,array('label' => 'My New Label:'))

please do not change fieldName, but you can play with Label within an array.

Enjoy!


The easiest way to do it in template - pass the second argument to the form_label

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


An answer for the Symfony 2.1 users who stumble onto this hoping for an answer, it's almost there is the @rikinadhyapak answer.

if you have extended the FormType class of some bundle like FOSUserBundle, in your buildForm method:

    $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


I would honestly hold off on learning the Symfony Form component for a couple weeks. Symfony devs are doing a major-overhaul on the Form API. From what I understand, most of it is done, and a pull request has been submitted to the main repository.


For Symfony 2.3 you can replace the label using the events as the following:

$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

});

but I would avoid this.


It is added in Symfony2 beta2 http://groups.google.com/group/symfony-users/browse_frm/thread/c66165093665809

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜