2012-09-19 16 views
40

Lo que quiero hacer es obtener variables almacenadas en la vista de formulario.Acceda directamente al valor de un campo de formulario al reemplazar el widget en una plantilla twig

{% form_theme edit_form _self %} 

{% block field_widget %} 
{% spaceless %} 
{% set type = type|default('text') %} 
<input type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %}/> 

{# MY CODE #} 
{% if type == "file" %} 
<a class="BOpreview" href="{# NEED TO REPLACE VAR HERE #}">Aperçu</a> 
{% endif %} 

{# MY ATTEMPT #} 
{{ form.title.get('value') }} 
{{ form.vars.value.url }} 

{% endspaceless %} 
{% endblock field_widget %} 

Mi forma tiene propiedades como URL, título, etc., y estoy tratando de acceder a ellos aquí para utilizarlo en el bloque aparato de campo.

me buscó y se encendieron https://groups.google.com/forum/?fromgroups=#!topic/symfony2/onor9uFte9E que sugería:

{{ form.title.get('value') }} 
{{ form.vars.value.url }} 

que no funcionó para mí.

Nota: Si hago un var_dump en $ form-> createView() en mi controlador, me sale:

object(Symfony\Component\Form\FormView)[331] 
    private 'vars' => 
     array (size=15) 
     'value' => 
      object(Panasonic\TestEtAvisBundle\Entity\Product)[168] 
      protected 'reviewArray' => 
       object(Doctrine\ORM\PersistentCollection)[234] 
       ... 
      protected 'testArray' => 
       object(Doctrine\ORM\PersistentCollection)[221] 
       ... 
      protected 'fbshareArray' => 
       object(Doctrine\ORM\PersistentCollection)[317] 
       ... 
      private 'id' => int 2 
      private 'name' => string 'Nom du produit' (length=14) 
      private 'title' => string '<span>Titre </span>' (length=19) 
      private 'image' => string 'bundles/testetavis/uploads/product/0d9d9550.png' (length=47) 
      private 'fbImage' => string 'bundles/testetavis/uploads/product/facebook//product_e928cd96.jpg' (length=65) 
      private 'description' => string '<span>Descriptif </span>' (length=24) 
      private 'url' => string 'http://www.google.com' (length=21) 
      private 'creationDate' => 
       object(DateTime)[210] 
       ... 
      private 'modificationDate' => 
       object(DateTime)[209] 
       ... 
      private 'isDeleted' => int 0 
     'attr' => 
      array (size=0) 
      empty 
     'form' => 
      &object(Symfony\Component\Form\FormView)[331] 
     'id' => string 'panasonic_testetavisbundle_producttype' (length=38) 
     'name' => string 'panasonic_testetavisbundle_producttype' (length=38) 
     'full_name' => string 'panasonic_testetavisbundle_producttype' (length=38) 

Quiero tener acceso a esa URL, por ejemplo, pero parece que no puede ser capaz de hazlo después de muchas variaciones. Incluyendo el uso de {{value}}, {{value.url}} Pero a pesar de vars, puedo hacer {{full_name}} y obtener panasonic_testetavisbundle_producttype.

¿Alguna idea?

Edit2: descubrí el verdadero problema ...

Edit3: Viendo que esta pregunta es bastante popular decidí aclarar en lo que he tratado de hacer en caso de que ayuda a alguien de la misma situación. Si confía estrictamente en lo que hace la pregunta, como indiqué de mi investigación y que Besnik apoyó son de hecho correctos. Ahora, lo que quería hacer es para cada archivo de tipo de entrada, obtener URL del objeto utilizado para representar el formulario y anexar un enlace de vista previa, usando la URL recuperada, junto al archivo de tipo de entrada. Si intentas obtener el formulario var de un tipo de entrada "archivo" como este "{{form.vars.value.url}}" en mi código, esto no funciona, ya que, si recuerdo correctamente, recibes un token en lugar de la url almacenada dentro del objeto.

Respuesta

94

Puede acceder a los datos actuales de su forma a través de form.vars.value:

{{ form.vars.value.title }} 

Ver Symfony2 Formas documentación: http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template

volcado vars utilizando dump función:

{{ dump(form.vars.value) }} 

Si está utilizando subformularios o desea tener un valor de un campo específico:

{{ form.FIELD.vars.VALUE }} 
+1

Si mira el vertedero, la url es una propiedad privada. ¿Tienes un getter para eso? (una función getValue()) –

+0

He editado mi pregunta para que sea más específica. Si bien {{form.vars.value.title}} funciona perfectamente en el formulario, no muestra nada dentro de un bloque de widgets que he anulado. Estoy tratando de obtener los valores de forma dentro del bloque reemplazado. Ver {% block field_widget%} en el código. ¿Algunas ideas? – Rishi

+0

@Besnik Tengo problemas para usar 'dump' en form.vars.value. Sé que el volcado está habilitado porque puedo usarlo en otro lado. ¿Algunas ideas? –

0

Edit2:

Finalmente, fue de hecho cada vez más el valor de la fila actual en {{valor}} aquí:

{% block field_widget %} 
{% spaceless %} 
{% set type = type|default('text') %} 
<input type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ **value** }}" {% endif %}/> 

{# MY CODE #} 
{% if type == "file" %} 
<a class="BOpreview" href="{{ value }}">Aperçu</a> 
{% endif %} 

{% endspaceless %} 
{% endblock field_widget %} 

Pero en mi caso me sale una ficha en lugar del valor ya que estoy usando el tipo de archivo de entrada. Esto se debe a una medida de seguridad en Symfony2.

4

Se puede acceder a los valores de los padres de los padres de un bloque widget de uso de form.parent.vars

1

Por ejemplo, queremos hacer que el valor de un campo de tipo texto llamado primerNombre necesitaremos

{{ form.vars.value.primerNombre }} 

Si nos quería representar el nombre de uno de los hijos que necesitaremos

{% for hijo in form.hijos %} 
    <td><div align="left">{{ form_widget(hijo.vars.value.primerNombre) }}</div></td> 
{% endfor %} 

¡Buena suerte!

Cuestiones relacionadas