2013-12-15 9 views
14

मैं symfony2 में फ़ील्ड को समूहबद्ध करना चाहता हूं। उदाहरण के लिए में के बीच एक div और जगह सुर्खियों में उन्हें लपेट:सिम्फनी 2 में समूह फॉर्म फ़ील्ड

<form> 
<div class="step-1"> 
    <h3>Step 1</h3> 
    Field 1 
    Field 2 
</div> 
<div class="step-2"> 
    <h3>Step 2</h3> 
    Field 3 
    Field 4 
</div> 
</form> 

समस्या रूप है बहुत ज्यादा क्षेत्रों मिल गया तो मैं नहीं कर सकते उन्हें टेम्पलेट में एक के बाद एक प्रस्तुत करना। फ़ील्ड जोड़ने पर कोई विकल्प नहीं है? पसंद:

$form = $this->createFormBuilder() 
     ->addGroup('step-1') 

या मैं इसे कैसे संभाल सकता हूं?

+0

सम्भावित समाधान के आदेश के बिना फ़ील्ड प्रदर्शित करने में टहनी में एक सूची का उपयोग करने के लिए है से अभ्यास को प्राथमिकता देनी चाहिए डुप्लिकेटिंग कोड। –

+0

@ एन .1 200+ या 2000+ ... इससे कोई फर्क नहीं पड़ता। मैन्युअल रूप से एक को संभालने के लिए यह बहुत अधिक है। –

उत्तर

10

टहनी जब एक न्यूनतम कोड के साथ कई क्षेत्रों प्रदर्शित करने के लिए आपकी मदद कर सकते हैं:,

<form> 
<div class="step-1"> 
    <h3>Step 1</h3> 
    {% for field in [ 'field1', 'field2'] 
     if (attribute(form, field) is defined) %} 
     {{ form_row(attribute(form, field)) }} 
    {% endfor %} 
</div> 
<div class="step-2"> 
    <h3>Step 2</h3> 
    {% for field in [ 
     'field3', 
     'field4', 
     'field5', 
     'field6' 
    ] if (attribute(form, field) is defined) %} 
     {{ form_row(attribute(form, field)) }} 
    {% endfor %} 
</div> 

{# Display the other fields #} 
{{ form_rest(form) }} 

</form> 
+0

के बजाय 'legisl_data' का उपयोग करना चाहिए जो मैं चाहता था उससे बहुत करीब था। लेकिन फिर भी मुझे नियंत्रक और टेम्पलेट में सभी 200 फ़ील्ड को फिर से लिखना होगा। अगर मैं नियंत्रक में एक फ़ील्ड हटा देता हूं तो मुझे इसे टेम्पलेट में भी हटाना होगा। –

+0

हां, आपको टेम्पलेट में फ़ील्ड को फिर से लिखना होगा, लेकिन नियंत्रक में नहीं। मैं यह जांचने के लिए एक परीक्षण जोड़ सकता हूं कि प्रत्येक फ़ील्ड इसे प्रदर्शित करने से पहले मौजूद है। मेरे पास यह सबसे अच्छा समाधान है। मैं अपना जवाब अपडेट करने जा रहा हूं। –

6

आपके फॉर्म वर्ग में संरचना आपके लेआउट में संरचना से संबंधित नहीं होनी चाहिए। आप जिस भी तरह से चाहें एचटीएमएल में फ़ील्ड को बना सकते हैं।

$builder->add(
    $builder->create('step1', 'form', array('virtual' => true)) 
     ->add('field1', 'text') 
     ->add('field2', 'text') 
); 

Source: आपके मामले में आप अपने कदम शीर्षकों बस जैसे आप अपने क्यू में किया था, उदा .:

<div class="step-1"> 
    <h3>Step 1</h3> 
    {{ form_widget(form.field1) }} 
    {{ form_widget(form.field2) }} 
</div> 

आप अभी भी समूह रूपों के लिए रुचि (मुझे लगता है कि परीक्षण नहीं किया है) तो जाते थे।

+1

ध्यान दें कि Symfony3 के लिए आपको 'वर्चुअल' प्रॉपर्टी –

14

मुझे पता चला this post (लिंक के लिए धन्यवाद "n.1") यह नियंत्रक के भीतर समूह के लिए संभव है के अनुसार:

$form = $this->createFormBuilder() 
      ->add(
       $this->createFormBuilder()->create('step1', 'form', array('virtual' => true)) 
       ->add('field1', 'text') 
       ->add('field2', 'text') 
      ) 

कौन सा निम्नलिखित टेम्पलेट देता है:

<div class="input-wrapper"> 
    <label class="required">Step1</label> 
    <div id="form_step1"> 
    <div class="input-wrapper"> 
     <label class="required" for="form_step1_field1">Field1</label> 
     <input id="form_step1_field1" type="text" required="required" name="form[step1][field1]"> 
     <input id="form_step1_field2" type="text" required="required" name="form[step1][field1]"> 
    </div> 
    </div> 
</div> 

कौन सा मैं जिस तरह से कर सकते हैं विषय में चाहता हूं। लेकिन "bschussek" भी लिखा:

आपके फॉर्म वर्ग में संरचना आपके लेआउट में संरचना से संबंधित नहीं होनी चाहिए। आप जिस भी तरह से चाहें एचटीएमएल में फ़ील्ड्स को बना सकते हैं।

तो शायद सबसे अच्छा अभ्यास संरचना के लिए नियंत्रक का उपयोग करने के लिए नहीं है और मैं "n.1"

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