2012-09-19 16 views
40

मैं जो करना चाहता हूं वह फ़ॉर्म व्यू में संग्रहीत चर प्राप्त करता है।एक टॉग टेम्पलेट में विजेट ओवरराइड करते समय सीधे फॉर्म फ़ील्ड के मान तक पहुंचें

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

मेरे रूप में यूआरएल, शीर्षक इत्यादि जैसी गुण हैं और मैं इसे फील्ड विजेट ब्लॉक में उपयोग करने के लिए यहां पहुंचने का प्रयास कर रहा हूं।

मैं इसके लिए खोज की है और https://groups.google.com/forum/?fromgroups=#!topic/symfony2/onor9uFte9E कि सुझाव पर आया था:

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

जो मेरे लिए काम नहीं किया।

नोट: अगर मैं $ फार्म पर एक var_dump करना> createView() मेरी नियंत्रक में, मैं मिलता है:

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) 

मैं उदाहरण के लिए कि यूआरएल तक पहुँचने के लिए चाहते हैं, लेकिन करने में सक्षम हो नहीं कर पा रहे कई बदलावों के बाद करो। {{Value}}, {{value.url}} का उपयोग सहित, लेकिन वर्र्स के बावजूद, मैं {{full_name}} कर सकता हूं और panasonic_testetavisbundle_producttype प्राप्त कर सकता हूं।

कोई भी विचार?

EDIT2: मैं वास्तविक समस्या को पता चला ...

Edit3: यह देखते हुए कि इस सवाल का काफी लोकप्रिय रहा है कि मैं क्या मामले में क्या करने का प्रयास किया पर स्पष्ट करने के लिए यह एक ही में किसी को मदद करता है का फैसला किया है परिस्थिति। यदि आप सवाल पूछते हैं कि प्रश्न के बारे में आप कड़ाई से भरोसा करते हैं, जैसा कि मैंने अपने शोध से कहा है और बेस्निक समर्थित वास्तव में सही हैं। अब मैं जो करना चाहता था वह प्रत्येक इनपुट प्रकार फ़ाइल के लिए है, इनपुट प्रकार फ़ाइल के बगल में पुनर्प्राप्त यूआरएल का उपयोग करके प्रपत्र प्रस्तुत करने के लिए प्रयुक्त ऑब्जेक्ट से यूआरएल प्राप्त करें और एक पूर्वावलोकन लिंक संलग्न करें। यदि आप मेरे कोड में "{{form.vars.value.url}}" जैसे इनपुट प्रकार "फ़ाइल" के रूप var को प्राप्त करने का प्रयास करते हैं, तो यह ठीक से याद नहीं होने पर, यह तब से काम नहीं करता है, आपको एक प्राप्त होता है ऑब्जेक्ट के अंदर संग्रहीत यूआरएल के बजाय टोकन।

उत्तर

94

आप form.vars.value के माध्यम से अपने फार्म की वर्तमान डेटा का उपयोग कर सकते हैं:

{{ form.vars.value.title }} 

Symfony2 देखें फार्म प्रलेखन:

{{ dump(form.vars.value) }} 
: http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template

डंप dump फ़ंक्शन का उपयोग करके वार्स

यदि आप सबफॉर्म का उपयोग कर रहे हैं या किसी विशिष्ट फ़ील्ड का मान रखना चाहते हैं:

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

यदि आप डंप देखते हैं, तो यूआरएल एक निजी संपत्ति है। क्या आपके पास इसके लिए गेटटर है? (एक getValue() फ़ंक्शन) –

+0

मैंने अपना प्रश्न अधिक विशिष्ट होने के लिए संपादित किया। जबकि {{form.vars.value.title}} फ़ॉर्म में पूरी तरह से काम करता है, यह उस विजेट ब्लॉक के अंदर कुछ भी नहीं दिखाता है जिसे मैंने ओवरराइड किया है। मैं ओवरराइड ब्लॉक के अंदर फॉर्म वैल्यू प्राप्त करने की कोशिश कर रहा हूं। कोड में {% ब्लॉक field_widget%} देखें। कोई विचार? – Rishi

+0

@ बेस्निक मुझे form.vars.value पर 'डंप' का उपयोग करने में परेशानी हो रही है। मुझे पता है डंप सक्षम है क्योंकि मैं इसे कहीं और इस्तेमाल कर सकता हूं। कोई विचार? –

0

EDIT2:

अंत में, मैं वास्तव में में वर्तमान पंक्ति का मूल्य हो रही थी {{मूल्य}} यहां:

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

लेकिन मेरे मामले में मैं मान के बजाय एक टोकन प्राप्त चूंकि मैं इनपुट प्रकार फ़ाइल का उपयोग कर रहा हूं। यह सिम्फनी 2 में सुरक्षा उपाय के कारण है।

4

आप का उपयोग form.parent.vars

1

उदाहरण के लिए, हम एक प्रकार के पाठ primerNombre बुलाया क्षेत्र से मूल्य को रखना चाहते हैं एक विजेट ब्लॉक से माता पिता माता पिता के मूल्यों को एक्सेस कर सकते हैं हम

{{ form.vars.value.primerNombre }} 

हम तो आवश्यकता होगी उन बच्चों में से एक का नाम प्रस्तुत करना चाहता था जिन्हें हमें

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

शुभकामनाएँ!

संबंधित मुद्दे