form_theme form for change _self php symfony twig

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 }} .