2016-05-03 6 views
9

सिम्फनी 2.7 के साथ, आप विधि getName()
विधि के साथ अपनी EntityType क्लास में किसी फ़ॉर्म का नाम कस्टमाइज़ कर सकते हैं। अब यह बहिष्कृत है। क्या सिम्फनी 3.0 के साथ ऐसा करने का कोई और तरीका है?
मेरे पास संग्रह के लिए कस्टम प्रोटोटाइप एंट्री_रो है जो मुझे विभिन्न रूपों में उपयोग करने की आवश्यकता होगी।
चूंकि पंक्तियों का नाम फॉर्म के नाम पर आधारित है, इसलिए मुझे बाद में उन्हें एक अलग रूप से उपयोग करने के लिए बदलने की आवश्यकता होगी।Symfony3: क्या किसी फ़ॉर्म का नाम बदलना संभव है?

+0

मैं इसे एक अच्छा विचार है एक कस्टम प्रपत्र नाम पर भरोसा करने की नहीं लगता। आप अपने संग्रह क्यों नहीं बदल सकते? मैं संग्रह का उपयोग कर रहा हूं, लेकिन मुझे इस समस्या का सामना नहीं हुआ। –

+0

@StephanVierkant यह एक बुरा विचार क्यों है? यदि आपको किसी समस्या की जानकारी है तो यह हो सकता है, कृपया मुझे बताएं, क्योंकि मैटटे के जवाब का उपयोग कर रहा हूं। मैं अपने संग्रह को बदलना नहीं चाहता क्योंकि मेरे पास दो रूप हैं: फ़ील्ड myCollection के साथ formA, और formB, जिसमें फ़ील्ड myCollection भी है। तो मेरे प्रोटोटाइप कस्टम फॉर्म में, अगर मैं _formA_myCollection_entry_row जैसे ब्लॉक लिखता हूं, तो जब मैं अपना फॉर्म बी कॉल करता हूं तो यह पहचाना नहीं जाएगा, क्योंकि इस बार इसे _formB_myCollection_entry_row कहा जाएगा। उम्मीद है कि मैं स्पष्ट हूं ... – Roubi

उत्तर

13

माइग्रेशन मार्गदर्शिका here में वर्णित अनुसार आपको getName की बजाय getBlockPrefix विधि लागू करनी चाहिए।

उदाहरण के रूप में:

/** 
* Returns the prefix of the template block name for this type. 
* 
* The block prefix defaults to the underscored short class name with 
* the "Type" suffix removed (e.g. "UserProfileType" => "user_profile"). 
* 
* @return string The prefix of the template block name 
*/ 
public function getBlockPrefix() 
{ 
    return "form_name"; 
} 

आशा इस मदद

+0

फिट करता है यह वही है जो मुझे चाहिए! तुमने मेरी समस्या हल की! मुझे नहीं पता था कि फॉर्म नाम अब ब्लॉकफ्रिक्स कहा जाता था, यही वह है जो मुझे इसे आधिकारिक दस्तावेज़ में नहीं मिला था। माइग्रेशन गाइड लिंक के लिए धन्यवाद, अगली बार जब मैं प्री-3.0 कार्यक्षमता की तलाश में हूं तो मैं इसे देखने की कोशिश करूंगा। – Roubi

9

आपके फॉर्म को कैसे बनाया गया है, इस पर निर्भर करते हुए, आपके फॉर्म का नाम सेट करने के विभिन्न तरीके हैं।

आप $this->createForm(CustomType::class) के माध्यम से प्रपत्र बना रहे हैं:

$formFactory = $this->get('form.factory'); 
$form = $formFactory->createNamed('custom_form_name', CustomType::class); 

आप नियंत्रक से प्रपत्र का निर्माण कर रहे हैं सीधे $this->createFormBuilder() के माध्यम से: अधिक जानकारी के लिए FormFactory और FormBuilder एपीआई पर

$formFactory = $this->get('form.factory'); 
$form = $formFactory->createNamedBuilder('custom_form_name', CustomType::class); 

देखो ।

+0

आपके उत्तर के लिए धन्यवाद, मैंने मैटेयो को चुना क्योंकि यह मेरी विशेष ज़रूरतों के लिए अधिक उपयुक्त है, लेकिन मुझे यकीन है कि आपका कोई और मददगार होगा। – Roubi

+0

@Roubi और आप पूरी तरह से सही हैं, यह आपकी समस्या को ठीक से – chalasr

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