2012-07-28 10 views
14

मेरे पास एक नया Customer बनाने के लिए एक फॉर्म है। एक ग्राहक के पास मोबाइल नंबर हो सकता है। मोबाइल नंबर + या 00 उपसर्ग के बिना जारी किया जाना चाहिए जो उपयोगकर्ता टाइप कर सकते हैं। इसे आसानी से पूरा किया जा सकता है:सिम्फनी में बाध्य फॉर्म डेटा को संशोधित करने के लिए सुझाई गई जगह कौन सी है?

$customer->setMobile(preg_replace("/^(\+|00)/", '', $customer->getMobile())); 

इस कोड को रखने के लिए सबसे अच्छी जगह कौन सा है?

  • कॉल इकाई प्रबंधक से पहले CustomerController के अंदर और इकाई को बनाए रखें। क्या यह वास्तव में एमवीसी पैटर्न में नियंत्रक का मामला है?
  • एक SanitizeCustomerSubscriber का उपयोग करना और FormEvents:POST_BIND घटना
  • को सुन एक CustomerSanitizer सेवा

कोई अन्य विचार का उपयोग? बेशक मैं सामान्य रूप से डेटा मैनिपुलेशन के बारे में बात कर रहा हूं, मोबाइल नंबर सिर्फ एक उदाहरण है: स्वच्छता के लिए फ़ील्ड केवल एक से अधिक हो सकता है।

उत्तर

42

आपको इसे PRE_BIND ईवेंट में करना चाहिए, जहां आप संसाधित होने से पहले सबमिट किए गए डेटा तक पहुंच सकते हैं।

$builder->addEventListener(FormEvents::PRE_BIND, function (FormEvent $event) { 
    $data = $event->getData(); 
    if (isset($data['mobile'])) { 
     $data['mobile'] = preg_replace("/^(\+|00)/", '', $data['mobile']); 
    } 
    $event->setData($data); 
}); 

रिकॉर्ड के लिए, Symfony 2.3 के रूप में, इस घटना PRE_SUBMIT कहा जाता है।

+0

मेरे पास BookController ** में ** पंजीकरण खाता है जो फ़ॉर्म डेटा में हेरफेर करने के लिए समान PRE_SUBMIT ईवेंट का उपयोग करता है। मैं अच्छी तरह से काम करता हूँ। लेकिन, सुरक्षा नियंत्रक ** में ** लॉगिन एक्शन बनाने के बाद, आज जब भी मैं लॉगिन कार्रवाई सबमिट करता हूं, तो यह (प्रोग्राम नियंत्रण) ** कार्यवाही के लिए बनाई गई ** PRE_SUBMIT ** ईवेंट पर जाता है। पंजीकरण कार्रवाई के लिए बनाए गए PRE_SUBMIT ईवेंट के साथ इस लॉगिन कार्रवाई में बाधा से कैसे बचें? ** नोट: ** दोनों नियंत्रक एक ही इकाई वर्ग का उपयोग करते हैं। – webblover

10

मैं इसे CustomersetMobile() विधि में डाल दूंगा - डेटा के करीब, बेहतर। इस प्रकार मोबाइल नंबर को संचरित किया जाएगा इससे कोई फर्क नहीं पड़ता कि इसे नियंत्रित करने के लिए नियंत्रकों या रूपों का उपयोग किया जाता है।

+0

बर्नहार्ड शूसेक के अलावा सिम्फनी फॉर्म रखरखाव है, मुझे लगता है कि यह बहुत बेहतर है (इस मामले पर) इसे सेटमोबाइल() में भी करें। – felipsmartins

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