2016-09-28 6 views
8

मैं अपनी कक्षा के लिए कॉन्फ़िगरेशन स्कीमा को परिभाषित करना चाहता हूं और उन्हें व्यवस्थापक विकल्पों के साथ ओवरराइड करना चाहता हूं। ऐसा करने के लिए मुझे व्यवस्थापक से डेटा कैप्चर करने के लिए एक फॉर्म की आवश्यकता है।TreeBuilder ऑब्जेक्ट के आधार पर गतिशील रूप से फ़ॉर्म कैसे बनाएं?

सिम्फनी Configuration Component में, TreeBuilder कक्षा कॉन्फ़िगरेशन स्कीमा को परिभाषित करने के लिए ज़िम्मेदार है। और जैसा कि आप जानते हैं Form Component में पेड़ की तरह पेड़ है TreeBuilder के समान।

TreeBuilder उदाहरण के आधार पर गतिशील रूप से Form ऑब्जेक्ट कैसे बना सकता है?

+0

आप 'फॉर्मबिल्डर 'आउटपुट के आधार पर गतिशील रूप से फॉर्म बनाने के लिए' फॉर्मबिल्डर 'का उपयोग कर सकते हैं? – Rvanlaak

+0

स्वचालित तरीके से यह कैसे संभव है? –

उत्तर

1

आपका पेड़बिल्डर, या इसका एक हिस्सा, पुनरावर्तनीय होना होगा। तो इसे यथासंभव सख्त रूप में एक रूप का प्रतिनिधित्व करके आप इसे बिल्डर को कॉन्फ़िगरेशन को आसानी से मैप करने के लिए उपयोग कर सकते हैं।

form: 
    name: 'exampleForm' 
    path: 'target_path' 
    fields: 
     fieldName: 
      type: 'TextType' 
      attr: 
       # some additional options 
     otherFieldName: 
      type: 'TextType' 
      attr: 
       # some additional options 

अधिक जानकारी के लिए config घटक के संसाधन अनुभाग देखें:: यह yml प्रारूप का उपयोग करने के लिए सबसे आसान होगा http://symfony.com/doc/current/components/config/definition.html#processing-configuration-values

संसाधित विन्यास तो प्रपत्र कारखाने के साथ संभाला जा सकता है और शायद ऐसा दिखाई देगा यह:

$config = $configuration->processConfiguration($config, FormType::class, null, $config['path']); 
$formBuilder = $container->get('form.factory')->createNamedBuilder($config['name'); 

foreach ($config['fields'] as $field) { 
    $formBuilder->add($fieldName, $field['type'], $field['attr']); 
} 
$form = $formBuilder->createForm(); 
संबंधित मुद्दे