2012-07-05 10 views
6

से पहले एक फार्म मूल्य को संशोधित करने के मैं निम्नलिखित स्थिति है:Symfony2: कैसे मान्यता

  • एक रूप फ़ील्ड प्रकार date
  • तरह dd.mm.YYYY
  • एक सत्यापन पैटर्न एक सहायक उद्देश्य यह है कि 12.07.2012 में 12 बदल जाता है या 2.502.05.2012 में आदि

मेरा सवाल है: मैं इनपुट विधि को बदलने वाली विधि कहां कहूं?

जब मैं इसे set-इकाई के विधि से कॉल करता हूं, तो मूल्य वास्तव में बदल जाता है। लेकिन जब फॉर्म को फिर से लोड करना (उदा। अपूर्ण सबमिट) पुराने मान (जैसे 2.5) और परिवर्तित मूल्य (2.5.2012) दिखाया गया है। अब, मैं फॉर्म कैसे कहूं, कि इकाई के भीतर मूल्य बदल गया है?

हो सकता है कि वहाँ भी बीच में यह कर का एक और तरीका है:

/** 
* @ORM\Column(type="datetime", nullable=true) 
* @Assert\DateTime() 
*/ 
protected $date_start; 

यह से है:

$form->bindRequest($request); 
// do some fancy stuff here 
if ($form->isValid()) {} 

पीएचपी

यह इकाई से है टाइप करें:

$builder->add('date_start', 'datetime', array(
    'label' => 'Start Datum/Uhrzeit', 
    'date_widget' => 'single_text', 
    'time_widget' => 'single_text', 
    'date_format' => 'dd.MM.yyyy', 
    'with_seconds' => false, 
    'required' => false, 
)); 
+0

मैंने नीचे एक उत्तर पोस्ट किया है, लेकिन यदि आपको अधिक जानकारी की आवश्यकता है तो अपने फॉर्म प्रकार और मॉडल के लिए कोड पोस्ट करने के लिए स्वतंत्र महसूस करें और मैं शायद अधिक विशिष्ट हो सकता हूं। – MDrollette

उत्तर

11

फ़ॉर्म और संशोधित डेटा को संशोधित करने के दो तरीके हैं। आप फॉर्म इवेंट्स का उपयोग कर सकते हैं, उनके उपयोग here का एक उदाहरण है या आप डेटा ट्रांसफॉर्मर का उपयोग कर सकते हैं जिसे समझाया गया है here

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

+0

बहुत धन्यवाद, 'DataTransformer' बिल्कुल ठीक लगता है, जो मैं खोज रहा हूं। – insertusernamehere