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 lasoptions
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).