2013-12-10 8 views
5

एक पल के लिए मान लें कि यह फ़ॉर्म दस्तावेज़ ऑब्जेक्ट क्लास को ZooCollection से उपयोग करता है जिसमें में केवल दो गुण ("नाम" और "रंग") हैं।डेटा के साथ सिम्फनी 2 फॉर्म प्री-फिल फ़ील्ड

मैं एक की तलाश में हूँ, सरल बेवकूफ समाधान काम कर करने के लिए पूर्व भरने के साथप्रपत्र फ़ील्ड्स दिया वस्तु ऑटो जादुई (जैसे। अद्यतन के लिए?)।

Acme/DemoBundle/Controller/CustomController:

public function updateAnimalAction(Request $request) 
{ 
    ... 
    // Create the form and handle the request 
    $form = $this->createForm(AnimalType(), $animal); 

    // Set the data again   << doesn't work ? 
    $form->setData($form->getData()); 
    $form->handleRequest($request); 
    ... 
} 
+0

क्या सिर्फ पशु ऑब्जेक्ट के गुणों को स्थापित करने के बारे में? –

उत्तर

6

आप पशु वस्तु है, जो आपको अवगत करवाने के वान लोड करना चाहिए। createForm() आपके फॉर्म में फ़ील्ड भरने के लिए लोड ऑब्जेक्ट का उपयोग करेगा।

आप यह मानते हुए एनोटेशन का उपयोग कर रहे हैं अपने मार्गों को परिभाषित करने के:

/** 
* @Route("/animal/{animal}") 
* @Method("PUT") 
*/ 
public function updateAnimalAction(Request $request, Animal $animal) { 
    $form = $this->createForm(AnimalType(), $animal, array(
     'method' => 'PUT', // You have to specify the method, if you are using PUT 
          // method otherwise handleRequest() can't 
          // process your request. 
    )); 

    $form->handleRequest($request); 
    if ($form->isValid()) { 
     ... 
    } 
    ... 
} 

मुझे लगता है कि इसकी हमेशा एक अच्छा विचार Symfony और सिद्धांत कंसोल आदेश (doctrine:generate:crud) द्वारा बनाया गया कोड से जानने के लिए। आप इस प्रकार के अनुरोधों को संभालने के विचार और तरीके को सीख सकते हैं।

1

ऑब्जेक्ट का उपयोग करके अपना फॉर्म बनाना सबसे अच्छा तरीका है (देखें @ dtengeri का जवाब)। लेकिन आप एक सहयोगी सरणी के साथ $form->setData() का भी उपयोग कर सकते हैं, और ऐसा लगता है कि आप जो पूछ रहे थे। ओआरएम का उपयोग न करने पर यह सहायक होता है, या यदि आपको केवल फॉर्म के डेटा का सबसेट बदलने की आवश्यकता है।

बड़े पैमाने पर पकड़ लिया कि आपके प्रपत्र बिल्डर में किसी भी मूलभूत मूल्यों नहींsetData() द्वारा ओवरराइड किया जाएगा। यह प्रतिद्वंद्वी है, लेकिन सिम्फनी कैसे काम करता है। चर्चा:

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