php - form - twig documentation
Cómo obtener un método Entidad Doctrine2 desde un formulario de Symfony2 en Twig (8)
Ninguno de los anteriores funcionó para mí en la versión 2.6.7 . Usé widgets de formulario personalizados para lograr esto:
{# src/AppBundle/Resources/views/Form/fields.html.twig #}
{% extends ''form_div_layout.html.twig'' %}
{%- block entity_widget -%}
<div {{ block(''widget_container_attributes'') }}>
{%- for n, child in form %}
{{- form_widget(child, {
''entity'': form.vars.choices[n].data
}) -}}
{{- form_label(child) -}}
{% endfor -%}
</div>
{%- endblock %-}
{%- block radio_widget -%}
{# You now have access to entity #}
{%- endblock %-}
Estoy en una plantilla de Twig y tengo una variable de "formulario" que representa un formulario de entidad Doctrine2.
Esta entidad tiene propiedades que están asignadas en el formulario, pero la entidad también tiene algunos métodos a los que me gustaría acceder desde mi plantilla Twig.
Me encantaría hacer algo como esto:
{{ form.myMethod }}
o tal vez algo como esto:
{{ form.getEntity.myMethod }}
pero desafortunadamente no funciona.
¿Cómo podría lograr lo que necesito?
Para acceder a su entidad desde su FormView en una plantilla de ramita, puede usar el siguiente código
{{ form.get(''value'') }}
Donde forma es tu objeto FormView. Esto devolverá su entidad y desde allí puede llamar a cualquier método. Si inserta una colección de entidades o una sola entidad en su formulario, puede acceder a ella de la misma manera
{{ form.someembedform.get(''value'') }}
o
{% for obj in form.mycollection %}
{{ obj.get(''value'').someMethod }}
{% endif %}
Parece que en algún momento el valor es en realidad nulo . Así que puedes usar
{{ (form.vars.value != null) ? form.vars.value.yourEntityMethod():'''' }}
Probado en SF v3.0.6.
Perdí algunas horas tratando de averiguar qué está pasando y por qué
{{ form.vars.value }}
es nulo.
Si tiene el objeto form.element (no el objeto del formulario en sí), por ejemplo, si está anulando una plantilla form_row que ha pasado el objeto form.row, puede obtener la Entidad de la siguiente manera:
{{ form.getParent().vars.value.MyEntityMethod }}
Espero que ayude a alguien!
EDITAR: año y más tarde - otro consejo útil:
{% block sonata_type_collection_widget %}
{% for child in form %}
{{ child.vars.form.vars.value.name }}
{% endfor %}
{% endblock %}
Solo para actualizar el tema:
form.get(''value'')
Está en desuso desde Symfony 2.1. Copia de Symfony / Component / Form / FormView:
/*
* @deprecated Deprecated since version 2.1, to be removed in 2.3. Access
* the public property {@link vars} instead.
*/
public function get($name, $default = null) ....
entonces supongo
form.vars.value.youMethod()
debe ser el camino a seguir Ha funcionado desde mí.
... y ahí va mi primer post aquí. ¡Espero eso ayude!
Una sintaxis aún más conveniente para obtener la entidad subyacente en lugar de
{{ form.get(''value'') }}
Es esto:
{{ form.vars.value }}
Entonces puedes llamar a cualquier método de entidad como este:
{{ form.vars.value.someMethod }}
Vea también el capítulo del formulario en los documentos de Symfony2:
http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template
los métodos de objetos deberían funcionar en ramita, sé que los usé en algún proyecto.
tratar de usar ()
como {{ form.myMethod() }}
utilice {{ form.getData.myMethod }}
.