isvalid form createform forms symfony

forms - createform - Colección de formulario Symfony2: se muestra el índice del objeto actual



symfony form validation (5)

Tengo un problema al mostrar la colección en mi formulario.

Al mostrar mi colección de entidades, tengo algo como esto:

0 Name: myInputName Address: myInputAddress 1 Name: myInputName Address: myInputAddress

Mi pregunta es por qué Symfony2 muestra el índice ...

Y esto para todas las entidades guardadas en mi colección ...

Aquí el código que uso:

$builder ->add(''person'', ''collection'', array( ''label'' => '' '', ''type'' => new PersonType(), ''prototype'' => true, ''allow_add'' => true, ''allow_delete'' => true, ''by_reference'' => false, )) ;

En mi archivo twig:

<div> {{ form_widget(edit_form) }} </div>

Ayuda por favor

Sam


Eliminar índices (etiquetas) para elementos de colección:

$builder ->add(''person'', ''collection'', array( ... ''options'' => array(''label'' => false) )) ;

Use la tecla entry_options lugar de las options para Symfony 3 y 4

Si desea agregar etiquetas personalizadas por fila, puede generar el formulario usted mismo:

{{ form_start(edit_form) }} {% for person in form.persons %} {{ form_row(person, {''label'': ''custom label per item'' }) }} {% endfor %} {{ form_end(edit_form) }}

Nota : probado en Symfony 2.3 y 2.4


Hace unos días, pero debido a que estaba enfrentando la misma pregunta para Symfony 3, la respuesta de sectus es la correcta.

Utilizar el

''entry_options'' => [''label''=>false],

opción dentro de su constructor para ocultar el elemento del objeto.

Atentamente


Puede personalizar la representación de su colección para que no muestre el índice con, por ejemplo:

{% block _FORMNAME_person_widget %} {% spaceless %} {% for child in form %} {{ form_widget(child.Name) }} {{ form_widget(child.Address) }} {% endfor %} {% endspaceless %} {% endblock %}


Sé que esto ha estado cerrado por un tiempo. Y no estoy seguro de si esto ha sido resuelto en otro lugar. Este problema es bastante simple de arreglar y me sorprende que no haya documentación sobre esto en ninguna parte. En PersonType o cualquier tipo que se use en una colección, simplemente modifique los vars [''name''] en buildView para que sea lo que quiere mostrar como la etiqueta.

public function buildView(FormView $view, FormInterface $form, array $options) { // Adjust the view based on data passed $this->vars[''name''] = $form->getData(); // Or... $this->vars[''name''] = ''Some random string''; }

Si lo quiere dinámico, usaría el objeto por form-> getData (). Dado que, en mi problema, estoy usando un tema de formulario, anular la ramita no es realmente una opción para mí.

Espero que esto ayude a alguien.


Usando la solución de @ MrBandersnatch a continuación, tuve que usar $view->vars[''name''] lugar de $this->vars[''name''] (Symfony 2.3).

(me disculpo por no agregar esto como comentario en la respuesta de @ MrBandersnatch, aún no tengo suficiente reputación).