2013-11-01 7 views
11

में गैर-इकाई रूपों के प्रीचार्ज किए गए संग्रह को एम्बेड करने के लिए कैसे करें मैं प्रीचार्ज किए गए गैर-इकाई रूपों का संग्रह एम्बेड करना चाहता हूं, यहां कोड है, पहले मूल रूप से निर्मित फॉर्मफॉर्म विधि है।symfony2

public function buildForm(FormBuilderInterface $builder, array $options) { 
    $builder->add("example1")->add("example2"); 
    $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { 
     /*some logic to do before adding the collection of forms*/ 
     $form->add('aclAccess', 'collection', array(
      'type' => new ChildFormType(), 
      'allow_add' => true, 
      'mapped' => false, 
      'data' => /* I dont know how to precharge a collection of non-entity forms*/ 
     )); 
    }); 
} 

अब बच्चे प्रपत्र

public function buildForm (FormBuilderInterface $builder, array $options) { 
    $builder->add("test1", "text", array("read_only" => true, "data" => "test")); 
    $builder->->add("test2", "choice", array(
     'choices' => array('opt1' => 'Opt1', 'opt2' => 'Opt2'), 
     'multiple' => true, 
     'expanded' => true 
    )); 
} 

तो मूलतः मैं अलग रूपों के रूप test2 क्षेत्र में उन लोगों के बच्चे विकल्पों को प्रबंधित करना चाहते हैं, प्रत्येक विकल्प समूह test1 फ़ील्ड का मान पर निर्भर करेगा, मुझे पता है यह फॉर्म वर्गों के बिना जुड़वां में कोडिंग करके किया जा सकता है, लेकिन मुझे लगता है कि फॉर्म वर्गों को स्थिरता, आदि के लिए phpunit परीक्षण चलाने के लिए सबसे अच्छा अभ्यास है ...

उत्तर

13

Using a Form Without a Class पर प्रलेखन के अनुसार, बाध्य डेटा केवल एक है सरणी।

आप नहीं इनमें से किसी करते हैं है, तो प्रपत्र डेटा एक सरणी के रूप में वापस आ जाएगी। इस उदाहरण में, $defaultData कोई ऑब्जेक्ट नहीं है (और data_class विकल्प सेट है), $form->getData() अंततः एक सरणी देता है।

और किसी भी गलत धारणा है कि आप प्रपत्र डेटा के बारे में हो सकता है स्पष्ट करने के लिए - एक प्रपत्र प्रकार की अंतर्निहित वस्तु/वर्ग एक इकाई होना जरूरी नहीं है - आप सार्वजनिक गुण या getters/setters के साथ किसी भी वर्ग का उपयोग कर सकते वह फार्म फ़ील्ड में नक्शा। उस मामले के लिए, इकाई वर्ग स्वयं विशेष नहीं हैं - उनके पास सिर्फ मैपिंग जानकारी का एक गुच्छा है जो ओआरएम को कैसे जारी रखता है।

लेकिन, वापस अपने मूल प्रश्न के, मैं अपने ChildFormType कैसा दिखता है पता नहीं है, लेकिन मान लें यह चाल करना चाहिए यही कारण है कि दो क्षेत्रों, sequence और title

$form->add('aclAccess', 'collection', array(
     'type' => new ChildFormType(), 
     'allow_add' => true, 
     'mapped' => false, 
     'data' => array(
      array('sequence' => 1, 'title' => 'Foo') 
      , array('sequence' => 2, 'title' => 'Bar') 
     ) 
    )); 

है जाने