2015-12-07 6 views
5

मान लें कि मैं कस्टम फॉर्म प्रकारों को सेवाओं के रूप में बनाता हूं, क्योंकि यह Symfony documentation में वर्णित है। लेकिन मैं 2 2 अलग इनपुट पैरामीटर के साथ "लिंग" कस्टम प्रकार, है, जो मैं Symfony 2.7 में इस तरह कर रहा था चाहते हैं:सिम्फनी 2.8/3.0 अपग्रेड: वेरिएबल पैरामीटर के साथ फॉर्म प्रकारों से कैसे निपटें?

# app/config/config.yml 
parameters: 
    genders1: 
     m: Male 
     f: Female 
    genders2: # This makes no sense at all, but it is for the example purpose! 
     h: Horse 
     t: Turtle 

और फिर, मैं इस तरह 2 सेवाओं की घोषणा की गई थी:

<!-- src/AppBundle/Resources/config/services.xml --> 
<service id="app.form.type.gender1" class="AppBundle\Form\Type\GenderType"> 
    <argument>%genders1%</argument> 
    <tag name="form.type" alias="gender1" /> 
</service> 

<service id="app.form.type.gender2" class="AppBundle\Form\Type\GenderType"> 
    <argument>%genders2%</argument> 
    <tag name="form.type" alias="gender2" /> 
</service> 

आप देखते हैं, मैं (gender1 और gender2 उपनाम के साथ) हीGenderType 2 के लिए वर्ग कस्टम प्रपत्र प्रकार का उपयोग किया गया था, के रूप में कर सकते हैं मैं इस तरह इस्तेमाल कर सकते हैं जो:

$builder 
    ->add('field1', 'gender1') 
    ->add('field2', 'gender2'); 

इसने मुझे विभिन्न इनपुट पैरामीटर के साथ केवल एक वर्ग (GenderType) में कुछ सामान्य तर्क जोड़ने की अनुमति दी (मेरे पास इस उदाहरण में 2 से अधिक संभावनाएं हैं)।

लेकिन सिम्फनी 2.8 के रूप में, सेवा उपनाम का उपयोग करके एक फ़ील्ड जोड़ना बहिष्कृत किया गया है।

$builder->add('field1', GenderType::class) 

तो मैं अपने 2 सेवाएं (उनमें से प्रत्येक एक ही इनपुट पैरामीटर नहीं होने) के बीच का अंतर कैसे बना सकते हैं: वर्ग के नाम के बजाय दूसरा तर्क के रूप में पारित किया जाना है, इस तरह है?

Gender1Type और Gender2Type बनाना एक सार GenderType कक्षा का विस्तार वास्तव में दर्दनाक होगा, क्योंकि मुझे खाली सामग्री के साथ बहुत से वर्ग बनाना होगा।

क्या आपको कोई विचार है कि सिम्फनी 2.8 में मेरे पैटर्न को कैसे कार्यान्वित किया जाए, विभिन्न इनपुट पैरामीटर के साथ सेवाओं को बनाए रखने, लेकिन बहुत सी कक्षाएं नहीं बना रही हैं?

उत्तर

3

ठीक है, इस विषय को थोड़ा और अधिक खोने के बाद, someone already asked सीधे सिम्फनी 2.8 में PR concerning this change में प्रश्न पूछें।

और जवाब यह है कि पैटर्न मैं कर रहा था अब संभव नहीं है, इसलिए मैं अपने समस्या के लिए 2 समाधान देख रहा है:

  • के रूप में कई कक्षाएं बनाएं जैसा कि मैंने सभी उपयोग करने के बजाय अपने कस्टम प्रकार के लिए सेवाओं के लिए किया था समय एक ही कक्षा, और इन कक्षाओं में एक सार एक का विस्तार करना (मेरे उदाहरण में: Gender1Type और Gender2Type वर्गों है कि एक AbstractGenderType सार वर्ग का विस्तार बनाने)
  • केवल एक वर्ग रखें, लेकिन यह करने के लिए विकल्पों को जोड़ने मेरी विशिष्ट मानदंडों पारित करने के लिए।
+1

हाँ। मैं एक ही चीज़ में भाग गया और एक ही निष्कर्ष पर आया। कक्षा के नामों का उपयोग करने में फायदे हैं लेकिन इस मामले में मुझे अभी भी मूल डिजाइन पर स्पष्ट लाभ नहीं दिख रहा है। ओह अच्छा। – Cerad

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