2011-04-05 22 views
6

Tuve un pequeño pero desagradable problema con el componente de campo symfony2. Por ejemplo, me gustaría salida del conjunto de campos de formulario en la plantilla ramita:etiqueta personalizada symfony2 textfield

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

Y es configuración del campo de texto aquí:

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

Pero por desgracia, cuando el motor hace que esta salida me sale 'NombreCampo' como etiqueta en lugar de 'MyCustomLabel'. No tendré problemas si imprimo campos de formulario para (en ese caso, puedo agregar una etiqueta en la plantilla para cada campo). Pero el script no conoce cierta cantidad y configuración de los campos del formulario antes de la ejecución. Entonces, necesito implementar un método de ciclo para la representación de campo. Y también quiero quedarme en la notación de ramita ... Estaré encantado de recibir un buen consejo :)

+0

¿Lo resolvió usted? ¿Cómo puedo configurar una etiqueta personalizada? – umpirsky

Respuesta

0

Honestamente, espero no aprender el componente Symfony Form durante un par de semanas. Los desarrolladores de Symfony están haciendo una importante revisión en la API de formulario. Por lo que entiendo, la mayor parte está hecho, y un pull request has been submitted to the main repository.

7

Si desea cambiar la etiqueta, que sigue los pasos. 1) Crear clase de formulario. 2) add('fieldName',null,array('label' => 'My New Label:'))

No cambie fieldName, pero puede jugar con Label dentro de una matriz.

¡Disfrútalo!

2

Una respuesta para los usuarios de Symfony 2.1 que tropiezan con esta esperanza de respuesta, casi está ahí la respuesta @rikinadhyapak.

si ha ampliado la clase FormType de algún paquete como FOSUserBundle, en su método 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

La forma más fácil de hacerlo en la plantilla - pasar el segundo argumento de la form_label

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

Para Symfony 2.3 puede reemplazar la etiqueta usando los eventos de la siguiente manera:

$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 

}); 

pero evitaría esto.

Cuestiones relacionadas