2012-09-19 13 views
40

Quello che voglio fare è ottenere le variabili memorizzate nella vista modulo.Accesso diretto al valore di un campo modulo quando si sostituisce il widget in un modello di ramoscello

{% 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 %} 

La mia forma ha proprietà come url, titolo, ecc e sto cercando di accedervi qui per usarlo nel blocco widget di campo.

ho cercato per esso e venuto sulla https://groups.google.com/forum/?fromgroups=#!topic/symfony2/onor9uFte9E che ha suggerito:

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

che non ha funzionato per me.

Nota: se faccio un var_dump su $ form-> createView() nel mio controller, ottengo:

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) 

voglio accedere all'URL per esempio, ma non sembrano essere in grado di fallo dopo molte variazioni. Compreso l'uso di {{value}}, {{value.url}} Ma a dispetto di Vars, posso fare {{full_name}} e ottenere panasonic_testetavisbundle_producttype.

Qualche idea?

Edit2: ho scoperto il vero problema ...

Edit3: Vedendo che questa domanda è molto popolare ho deciso di chiarire su quello che ho cercato di fare in caso aiuta qualcuno nella stessa situazione. Se ti affidi rigorosamente a ciò che la domanda pone, come ho affermato dalla mia ricerca e che Besnik ha supportato, è davvero corretto. Ora quello che volevo fare è per ogni tipo di file di input, ottenere url dall'oggetto usato per renderizzare il modulo e aggiungere un link di anteprima, usando l'URL recuperato, accanto al file del tipo di input. Se si tenta di ottenere il formato var di un tipo di input "file" come questo "{{form.vars.value.url}}" nel mio codice, questo non funziona poiché, se ricordo correttamente, si riceve un token invece dell'url memorizzato all'interno dell'oggetto.

risposta

94

È possibile accedere ai dati attuali del modulo tramite form.vars.value:

{{ form.vars.value.title }} 

See Symfony2 Forms documentazione: http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template

Dump vars utilizzando dump funzione:

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

Se si utilizzano le sottomaschere o si desidera avere un valore di un campo specifico:

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

Se si guarda alla discarica, l'url è una proprietà privata. Hai un getter per questo? (una funzione getValue()) –

+0

Ho modificato la mia domanda per essere più specifica. Mentre {{form.vars.value.title}} funziona perfettamente nel modulo, non mostra nulla all'interno di un blocco di widget che ho sovrascritto. Sto cercando di ottenere i valori del modulo all'interno del blocco sottoposto a override. Vedi {% block field_widget%} nel codice. Qualche idea? – Rishi

+0

@Besnik Ho problemi nell'usare 'dump' su form.vars.value. So che il dump è abilitato perché posso usarlo altrove. Qualche idea? –

0

Edit2:

Infine, mi è stato effettivamente ottenendo il valore della riga corrente in {{valore}} qui:

{% 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 %} 

Ma nel mio caso ho un pegno al posto del valore dal momento che sto usando il file di tipo input. Ciò è dovuto a una misura di sicurezza in Symfony2.

4

È possibile accedere ai valori della controllante genitore da un blocco widget di utilizzare form.parent.vars

1

Per esempio, vogliamo rendere il valore da un campo di tipo testo chiamato primerNombre avremo bisogno

{{ form.vars.value.primerNombre }} 

Se noi volevo rendere il nome di uno dei bambini di cui abbiamo bisogno

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

Buona fortuna!

Problemi correlati