2012-09-19 12 views
40

Co chcę zrobić, to uzyskać zmienne przechowywane w widoku formularza.Bezpośredni dostęp do wartości pola formularza podczas zastępowania widgetu w szablonie gałązki

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

Mój formularz ma właściwości takie jak adres URL, tytuł itp. I próbuję uzyskać do nich dostęp, aby użyć go w bloku widgetu pola.

Szukałem go i wszedł na https://groups.google.com/forum/?fromgroups=#!topic/symfony2/onor9uFte9E że sugerowana:

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

który nie działa dla mnie.

Uwaga: Jeśli mam zrobić var_dump na $ form-> createView() w moim kontrolera, otrzymuję:

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) 

Chcę uzyskać dostęp do tego adresu URL, na przykład, ale nie wydaje się być w stanie zrób to po wielu odmianach. W tym użycie {{value}}, {{value.url}} Ale oprócz vars, mogę zrobić {{full_name}} i uzyskać panasonic_testetavisbundle_producttype.

Wszelkie pomysły?

Edit2: dowiedziałem się prawdziwy problem ...

Edit3: Widząc, że to pytanie jest dość popularny postanowiłem wyjaśnić, co próbowałem zrobić w przypadku, gdy ktoś pomaga w ten sam sytuacja. Jeśli polegacie wyłącznie na tym, o co pyta pytanie, jak stwierdziłem w moich badaniach i że wsparcie Besnika jest rzeczywiście poprawne. Teraz chciałem zrobić dla każdego pliku typu wejściowego, uzyskać adres URL z obiektu używanego do renderowania formularza i dołączyć łącze podglądu, używając pobranego adresu URL, obok pliku typu wejściowego. Jeśli spróbujesz uzyskać w formularzu var formularz typu "plik", taki jak ten "{{form.vars.value.url}}", to nie działa, ponieważ, jeśli dobrze pamiętam, otrzymasz token zamiast adresu URL przechowywanego wewnątrz obiektu.

Odpowiedz

94

można uzyskać dostęp do aktualnych danych o swojej postaci poprzez form.vars.value:

{{ form.vars.value.title }} 

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

Dump vars za pomocą dump funkcję:

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

Jeśli używasz podformuł lub chcesz mieć wartość określonego pola:

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

Jeśli spojrzysz na zrzut, adres URL jest własnością prywatną. Czy masz na to zyski? (a funkcja getValue()) –

+0

Zmodyfikowalem moje pytanie tak, aby było bardziej szczegółowe. Chociaż {{form.vars.value.title}} działa doskonale w formie, nie pokazuje niczego wewnątrz bloku widgetu, który przesłoniłem. Próbuję uzyskać wartości formularza wewnątrz przesłoniętego bloku. Zobacz {% block field_widget%} w kodzie. Jakieś pomysły? – Rishi

+0

@Besnik Mam problem z użyciem 'dump' na form.vars.value. Wiem, że dump jest włączony, ponieważ mogę go użyć gdzie indziej. Jakieś pomysły? –

0

Edit2:

Wreszcie, byłem rzeczywiście coraz wartość bieżącego wiersza w {{value}} tutaj:

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

Ale w moim przypadku mam tokenu zamiast wartości ponieważ używam pliku typu wejściowego. Wynika to z zabezpieczeń w Symfony2.

4

Można uzyskać dostęp do wartości nadrzędnej rodzica z bloku widget z użyciem form.parent.vars

1

Na przykład, chcemy uczynić wartość z pola typu tekstowego o nazwie primerNombre musimy

{{ form.vars.value.primerNombre }} 

gdybyśmy chciałem nadać nazwę jednemu z dzieci, które będziemy potrzebować:

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

Powodzenia!

Powiązane problemy