2012-06-03 16 views
13

मैं एक backbone.js एप्लिकेशन के लिए symfony2 बैकएंड पर काम कर रहा हूं। मेरे पास मेरा मॉडल और रूप है।अतिरिक्त फ़ील्ड के साथ symfony2 रूपों को मान्य करना

हालांकि, बैकबोन.जेएस आरईएसटी एपीआई में कुछ अतिरिक्त गुण भेजता है जब यह मॉडल बना रहा/अपडेट कर रहा है और मैं फॉर्म को मान्य करने के लिए संघर्ष कर रहा हूं।

मैं अतिरिक्त डेटा स्वीकार करने के लिए symfony2 में एक फॉर्म कैसे प्राप्त कर सकता हूं, या डेटा को बाध्य करने से पहले मैं विशेष कुंजी कैसे छोड़ सकता हूं?

उत्तर

12

Symfony2 अतिरिक्त डेटा स्वीकार मिलता है, आपके प्रपत्र बिल्डर के लिए अतिरिक्त फ़ील्ड जोड़, और उनके property_path विकल्प गलत पर सेट करने के लिए:

उदाहरण:

$builder 
    ->add('my_additional_field', 'checkbox', array(
     'mapped' => false, 
    )); 

आप कुंजी ड्रॉप करने की जरूरत नहीं है डेटा को बाध्य करने से पहले, उन्हें वैसे भी अनदेखा कर दिया जाएगा।

+3

+1 के लिए त्वरित नोट> = 2.1: "संस्करण 2.1 में नया: 2.1 से, मैप किए गए विकल्प को इस उपयोग-मामले के लिए जोड़ा गया है।" http://symfony.com/doc/2.1/reference/forms/types/hidden.html#mapped –

+0

हो सकता है कि आपको अपने उत्तर को अपडेट करने के लिए विचार करना चाहिए कि कौन सा संस्करण मान्य है। – xPheRe

+1

मैं अब PHP नहीं करता हूं। यदि आप कर सकते हैं तो कृपया मेरा उत्तर अपडेट करें। –

2

आप FormEvents::BIND_CLIENT_DATA (या FormEvents::PRE_BIND के लिए सुन सकते हैं यदि आप 2.1 देव का उपयोग कर रहे हैं) ईवेंट श्रोता और फ़ील्ड जोड़ें/हटाएं। this कुकबुक प्रविष्टि देखें।

16

property_path अब sf 2.1 में हटाई गई है, "मैप किया गया" का उपयोग करने के बजाय

$builder 
    ->add("firstName", "text") 
    ->add("lastName", "text") 
    ->add("tac", "checkbox", array(
     "mapped" => false 
    ) 
); 
46

आप विकल्प "allow_extra_fields" का उपयोग करना चाहिए।

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
     $resolver->setDefaults(
     array(
      'allow_extra_fields' => true 
     ) 
    ); 
} 
+2

allow_extra_fields को 2.6 तक सिम्फनी में शामिल नहीं किया जाएगा। अतिरिक्त फ़ील्ड जोड़ने का यह सही तरीका होगा। मैप = झूठा सुझाव दिया जाएगा यदि आप अतिरिक्त फ़ील्ड नामों को सबमिट करेंगे जो सबमिट किए जाएंगे। – Heyflynn

+1

चूंकि 2.6 को अब स्थिर रिलीज के रूप में चिह्नित किया गया है, इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए। @ user1432227 – Chausser

+0

@krun आप symfony 2.8/3. * उदाहरण भी कहां जोड़ सकते हैं: 'setDefaultOptions फ़ंक्शन के बजाय कॉन्फ़िगरेशनऑप्शन (विकल्प रीसोलवर $ रिज़ॉल्वर) '। –

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