2011-11-06 20 views
6

समस्या 1पहुँच त्रुटियों रूप

मैं ajax प्रस्तुत करने के माध्यम से एक पंजीकरण फार्म का निर्माण करना चाहते हैं प्रस्तुत की। पंजीकरण कार्य $form->isValid() है। हालांकि, अगर फॉर्म पंजीकरण विफल रहता है तो मुझे AJAX के माध्यम से इन त्रुटियों को वापस करने की आवश्यकता है।

if ($form->isValid()) { 

}else{ 
    $errors = $form->getErrors(); 
    // return some json encoded errors here 
} 

$form->getErrors() एक खाली सरणी भले ही प्रपत्र को मान्य नहीं किया था (इस मामले में मैं एक उपयोगकर्ता नाम है कि बहुत छोटा है के साथ परीक्षण कर रहा हूँ) देता है।

समस्या 2

दूसरी समस्या मैं अगर प्रपत्र मान्य करता है, लेकिन अभी भी एक त्रुटि है। उदाहरण के लिए एक अनूठा क्षेत्र जिसके लिए कोई भी वही मान जमा करने का प्रयास करता है।

if ($form->isValid()) { 

    $em = $this->getDoctrine()->getEntityManager(); 
    $em->persist($form->getData()); 
    $em->flush(); 

    // error could be a username submitted more than once, username is unique field 

}else{ 
    // ... 
} 

मुझे लगता है कि त्रुटि को कैसे पकड़ने और json के माध्यम से इसे वापस कर सकते हैं?

उत्तर

7

समस्या 1

आपके प्रपत्र बिल्डर आप error_bubbling उपयोग कर सकते हैं अपने फार्म वस्तु में त्रुटियों को स्थानांतरित करने में। जब आप क्षेत्र निर्दिष्ट करें, इसे इस तरह एक विकल्प के रूप में पारित:

$builder->add('username','text', array('error_bubbling'=>true)); 

और आप इस तरह अपने प्रपत्र वस्तु में त्रुटियों पहुँच सकते हैं:

$form->getErrors(); 

आउटपुट कुछ

तरह
array (
    0 => 
    Symfony\Component\Form\FormError::__set_state(array(
    'messageTemplate' => 'Your username must have at least {{ limit }} characters.', 
    'messageParameters' => 
    array (
     '{{ value }}' => '1', 
     '{{ limit }}' => 2, 
    ), 
)), 
) [] [] 

fyi: यदि आप फॉर्म/टाइप का उपयोग कर रहे हैं तो आप डिफ़ॉल्ट मान के रूप में error_bubbling सेट नहीं कर सकते हैं, इसे प्रत्येक फ़ील्ड को असाइन किया जाना है।

उपयोगी लिंक: http://symfony.com/doc/2.0/reference/forms/types/text.html#error-bubbling

समस्या 2

http://symfony.com/doc/2.0/reference/constraints/UniqueEntity.html

4

समस्या 1

त्रुटियों प्रपत्र पर ही नहीं हैं। Form::getErrors केवल फॉर्म ऑब्जेक्ट पर मौजूद होने पर त्रुटियों को वापस कर देगा। आपको फॉर्म को पार करने और प्रत्येक बच्चे पर त्रुटियों की जांच करने की आवश्यकता है।

Form::isValid इसके विपरीत बच्चों को परेशान करता है और जांचता है कि उनमें से कोई भी अमान्य है या नहीं।

समस्या 2

अगर अभी सत्यापन के बाद "त्रुटियों", इसका मतलब है कि आपके सत्यापन के पूर्ण नहीं है। यदि आपके एप्लिकेशन को एक गैर-मानक बाधा की आवश्यकता है, तो आपको आगे बढ़ना चाहिए और एक कस्टम बाधा लिखनी चाहिए। अधिक जानकारी के लिए the cookbook entry on writing custom validator constraints देखें।

+0

सत्यापनकर्ता कैसे पता होगा कि किसी को पहले से ही है कि तालिका में उपयोगकर्ता नाम का इस्तेमाल किया है? मैंने सोचा कि वैधकर्ता चेक किया गया है कि वह डेटा सही है, न कि वह डेटा पहले से मौजूद है या नहीं, या यह दोनों करता है? – ed209

+0

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

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