2012-01-08 17 views
5

क्या संग्रह फ़ॉर्म फ़ील्ड में आइटम के लिए कस्टम वैश्विक टेम्पलेट्स जोड़ना उचित है?symfony2 में कस्टम संग्रह टेम्पलेट्स

मैं संग्रह टेम्पलेट को स्वयं कस्टमाइज़ नहीं करना चाहता, लेकिन संग्रह में प्रत्येक ऑब्जेक्ट का प्रतिपादन, उदाहरण के लिए संग्रह में निहित प्रत्येक ऑब्जेक्ट को विशिष्ट क्लास या मार्कअप जोड़ने के लिए।

मैं एक संग्रह क्षेत्र के साथ एक फार्म इस तरह जोड़ लिया है:

$builder 
    ->add('items', 'collection', array(
     'type' => new ItemType(), 
     'allow_add' => true, 
     'allow_delete' => true, 
     'prototype' => true 
    )); 

मैं (अन्य बातों के अलावा) संग्रह में प्रत्येक आइटम के लिए एक "हटाएँ" बटन जोड़ने के लिए एक टहनी टेम्पलेट परिभाषित करना चाहते हैं।

मुझे पता चला है कि संग्रह को कस्टमाइज़ करने के लिए 'संग्रह_विड्जेट' टेम्पलेट है, यह केवल संग्रह के लिए ही है, व्यक्तिगत आइटम नहीं।

नोट 1: मुझे सभी रूपों में सभी संग्रहों के लिए ऐसा करने के लिए वैश्विक टेम्पलेट का उपयोग करने की आवश्यकता है, मुझे पता है कि मैं इसे प्रत्येक फॉर्म टेम्पलेट के लिए हल कर सकता हूं, लेकिन यह बात नहीं है।

नोट 2: अब तक मैंने इसे jquery के साथ हल किया है, संग्रह_विजेट में एक वर्ग जोड़कर और jquery के साथ अपने सभी बच्चों के लिए बटन जोड़ना। यह अभी के लिए ठीक काम करता है, लेकिन मैं सभी jquery हैंडलिंग किए बिना 100% टेम्पलेट समाधान की तलाश में हूं। आदर्श रूप से यह नई वस्तुओं को जोड़ने के लिए पंक्ति प्रोटोटाइप के साथ भी काम करना चाहिए।

उत्तर

12

अंत में मुझे इसका अच्छा समाधान मिला। सबसे पहले, मुझे form_rows ब्लॉक को कॉल करने के बजाय एक संग्रह_विजेट कस्टम टेम्पलेट (जेनेरिक form_widget से कॉपी किया गया) और अंदर बनाना था, मैं collection_rows ब्लॉक को कॉल करता हूं, जो form_rows ब्लॉक का अनुकूलन है। संग्रह_रोव ब्लॉक के अंदर आप जो कुछ भी चाहते हैं उसे अनुकूलित कर सकते हैं, मैंने अभी प्रत्येक बच्चे के लिए एक कस्टम क्लास जोड़ा है।

{% block collection_widget %} 
{% spaceless %} 
    <div {{ block('widget_container_attributes') }}> 
     {{ block('collection_rows') }} 
     {{ form_rest(form) }} 
    </div> 
{% endspaceless %} 
{% endblock collection_widget %} 

{% block collection_rows %} 
{% spaceless %} 
    {{ form_errors(form) }} 
    {% for child in form %} 
     {{ form_row(child, {'attr':{'class':'collection-item'}}) }} 
    {% endfor %} 
{% endspaceless %} 
{% endblock collection_rows %} 
:

यहाँ दो टेम्पलेट्स है

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