2013-01-08 45 views
8

पर कुछ अतिरिक्त डेटा जोड़ने के लिए मेरे पास Book नामक मेरी इकाई के लिए एक फॉर्म है और मेरे पास मेरे दृश्य में एक फॉर्म प्रदर्शित करने के लिए एक प्रकार है। इस प्रकार में मेरे पास कुछ फ़ील्ड हैं जो मेरी इकाई में गुणों के लिए मैप किए गए हैं।एक सिम्फनी 2 फॉर्म

अब मैं एक और फ़ील्ड जोड़ना चाहता हूं जो मेरी इकाई में मैप नहीं किया गया है और फॉर्म निर्माण के दौरान उस क्षेत्र के लिए कुछ प्रारंभिक डेटा प्रदान करता है।

मेरे प्रकार इस

// BookBundle\Type\Book 
public function buildForm(FormBuilderInterface $builder, array $options = null) 
{ 
    $builder->add('title'); 
    $builder->add('another_field', null, array(
     'mapped' => false 
    )); 
} 

प्रपत्र इस

$book = $repository->find(1); 
$form = $this->createForm(new BookType(), $book); 

की तरह बनाई गई है मैं कैसे प्रपत्र निर्माण के दौरान अब कुछ प्रारंभिक डेटा की आपूर्ति कर सकते तरह लग रहा है? या another_field फ़ील्ड में प्रारंभिक डेटा जोड़ने के लिए मुझे उस फ़ॉर्म के निर्माण को कैसे बदलना है?

+0

आप क्षेत्र इकाई पर मैप नहीं के साथ कर रही पर क्या योजना बनाई है: तब जब आप इसे बचाने के लिए तैयार होने के लिए प्रपत्र डेटा प्रोसेस कर रहे हैं, आप के साथ गैर-मैप किया गया डेटा का उपयोग कर सकते हैं? – simshaun

+0

मैं प्रपत्र या अनुरोध से सबमिट किया गया डेटा प्राप्त करना चाहता हूं और डेटा को मैन्युअल रूप से संसाधित करना चाहता हूं। –

उत्तर

29

मेरे पास एक ऐसा फॉर्म भी है जिसमें फ़ील्ड हैं जो अधिकतर पहले परिभाषित इकाई से मेल खाते हैं, लेकिन फॉर्म फ़ील्ड में से एक को गलत पर सेट किया गया है।

नियंत्रक में इस के आसपास पाने के लिए, आप इसे कुछ प्रारंभिक डेटा बहुत आसानी से इस तरह दे सकते हैं:

$product = new Product(); // or load with Doctrine/Propel 
$initialData = "John Doe, this field is not actually mapped to Product"; 
$form = $this->createForm(new ProductType(), $product); 
$form->get('nonMappedField')->setData($initialData); 

कि के रूप में सरल।

$form->get('nonMappedField')->getData(); 
+0

उपयोगी टिप: जब गैर-मैप किए गए फ़ील्ड को आप पॉप्युलेट करना चाहते हैं, वह सबफॉर्म है, तो आपको 'get()' कॉल: '$ form-> get ('nonMappedSubForm') -> get ('subFormField') प्राप्त करना होगा। -> setData (...) '। – Ninj

+0

अतिरिक्त फ़ील्ड से डेटा पुनर्प्राप्त करने के लिए कैसे देख रहा था। $ फार्म> प्राप्त ('nonMappedField') -> GetData(); धन्यवाद –

5

एक सुझाव यह अपने booktype कि "another_field" डेटा शामिल हैं पर एक निर्माता तर्क (या सेटर) जोड़ने के लिए हो सकता है, और तर्क जोड़ने में, 'डेटा' पैरामीटर सेट:

class BookType 
{ 
    private $anotherFieldValue; 

    public function __construct($anotherFieldValue) 
    { 
     $this->anotherFieldValue = $anotherFieldValue; 
    } 

    public function buildForm(FormBuilderInterface $builder, array $options = null) 
    { 
     $builder->add('another_field', 'hidden', array(
      'property_path' => false, 
      'data' => $this->anotherFieldValue 

     )); 
    } 
} 

फिर निर्माण :

$this->createForm(new BookType('blahblah'), $book); 
+0

आपके उत्तर के लिए धन्यवाद। मुझे ऐसा करने का एक और शानदार तरीका मिला। एक मिनट में एक जवाब पोस्ट करेंगे। –

2

आप इस तरह अनुरोध पैरामीटर बदल सकते हैं अतिरिक्त डेटा के साथ प्रपत्र समर्थन करने के लिए:

$type = new BookType(); 

$data = $this->getRequest()->request->get($type->getName()); 
$data = array_merge($data, array(
    'additional_field' => 'value' 
)); 

$this->getRequest()->request->set($type->getName(), $data); 

इस प्रकार आपका फॉर्म आपके क्षेत्र के प्रतिपादन पर सही मानों को भर देगा। यदि आप कई क्षेत्रों की आपूर्ति करना चाहते हैं तो यह एक विकल्प हो सकता है।

+0

यह बेहतर है! अच्छा लगा। – Mike

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

  • कोई संबंधित समस्या नहीं^_^