2009-08-06 11 views
9

मैं एक ज़ेंडफ्रेमवर्क एप्लिकेशन का निर्माण कर रहा हूं जो एक लॉगिन फॉर्म के रूप में एक ईमेल पता और पासवर्ड मांग रहा है - लॉगिन प्रयास के साथ डेटाबेस को मारने से पहले ईमेल पते को सत्यापित करना समझ में आया, क्योंकि एक अवैध ईमेल कभी वैध नहीं होगा मारो। Zend_Validate_EmailAddress जाने का सही तरीका प्रतीत होता है, लेकिन मुझे इसके साथ एक समस्या है जिसमें कई त्रुटियां उत्पन्न होती हैं (कोड के बाद नीचे, प्रश्न)।एक Zend_Form में, Zend_Validate_Email से कई त्रुटियों को उत्पन्न करने से कैसे बचें?

// WPMail_AuthController::loginAction() 
$this->view->form = $form; 

और ध्यान में रखते हुए, यह सीधे echo'd है:

मेरे फ़ॉर्म वर्तमान में

//WPMail_Form_Login::init() 
$email = $this->addElement('text', 'email', array(
    'label'=>'Email', 
    'required'=>true, 
    'filters'=>array('stringtrim'), 
    'validators'=>array(array('emailaddress', true, array(
     'messages'=>array(
      'emailAddressInvalidHostname'=>'Your email address is invalid', 
      'emailAddressInvalidFormat'=>'Your email address is invalid', 
      '...'=>'(repeat for all message templates)' 
     ) 
    ))), 
)); 

नियंत्रक में निम्नलिखित मैं सीधे दृश्य में प्रपत्र पारित है

// views/scripts/auth/login.phtml 
<?php echo $this->form ?> 

परिणाम वर्तमान में ऐसा कुछ है:

- Your email address is invalid 
- 'asda!!!' does not match the expected structure for a DNS hostname 
- 'asda!!!' does not appear to be a valid local network name 

जो मैं जानना चाहता हूं वह है: क्या ज़ेंड _ को कॉन्फ़िगर करना संभव है _ ईमेल एड्रेस इस तरह से सत्यापित करें कि यह केवल एक ईमेल-अमान्य त्रुटि उत्पन्न करता है? 'कॉन्फ़िगर' से मेरा मतलब है, कक्षा को विस्तारित किए बिना और तर्क के साथ तर्क को ओवरराइड करना।

टीआईए।

उत्तर

10

ज़ेंड फॉर्म एलिमेंट में विभिन्न विधियां हैं जिनका उपयोग आप संदेशों को कस्टमाइज़ करने के लिए कर सकते हैं। यह दस्तावेज़ों से बहुत स्पष्ट नहीं है लेकिन addErrorMessage() विफल सत्यापन पर एक कस्टम त्रुटि संदेश सेट करता है।

आपका उदाहरण इसलिए देखने की तरह होगा:

$email = new Zend_Form_Element_Text('email'); 
$email->setLabel('Email') 
     ->setRequired(true) 
     ->addFilter('stringtrim') 
     ->addValidator('emailAddress', true) 
     ->addErrorMessage('Your email address is invalid'); 
$this->addElement($email); 

http://framework.zend.com/manual/en/zend.form.elements.html#zend.form.elements.validators.errors

+0

अद्भुत, धन्यवाद! मैं वास्तव में उस पर आया, लेकिन किसी भी तरह यह माना जाता है कि एक त्रुटि संदेश जोड़ना फॉर्म को अमान्य कर देगा (जैसा कि यह आपके स्वयं के सत्यापन के हिस्से का हिस्सा है) .. यह देखकर खुशी हुई कि यह आसान है! – kander

+2

यह भ्रमित हो सकता है .. $ ईमेल-> addError ($ message) एक त्रुटि सेट करेगा और अमान्य के रूप में चिह्नित होगा, लेकिन $ ईमेल-> addErrorMessage ($ message) बस संदेश सेट करने के लिए प्रतीत होता है, जो डिफ़ॉल्ट को ओवरराइड करता है, और करता है एक त्रुटि सेट नहीं है! – simonrjones

+0

+1, ज्ञान टिप के लिए धन्यवाद – Ish

1

के रूप में उन संदेशों से एक सत्यापनकर्ता उत्पन्न कर रहे हैं, मुझे नहीं लगता कि यह संभव है पर एक पूरे के रूप त्रुटियाँ पैदा करता :-(

Zend_Validate_EmailAddress::isValid विधि सब सत्यापन करता है, करते हैं, ऐसा लगता है।

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


आप, ज़ाहिर है, की तुलना में अभी भी वारिस सकता है और डिफ़ॉल्ट व्यवहार को संशोधित ... लेकिन आप ने कहा आप ऐसा नहीं करना चाहता था, इसलिए ...


, अगर मैं गलत हूँ, और एक तरीका है, मैं इसके बारे में बहुत उत्सुक हूं ;-)

+1

वास्तव में, संदेशों दो प्रमाणकों के द्वारा उत्पन्न किया गया मिलते हैं!Zend_Validate_Hostname को अप्रत्यक्ष रूप से Zend_Validate_Email द्वारा बुलाया जा रहा था। – kander

3

Zend_Form का उपयोग करके पैड्राइक ब्रैडी द्वारा tutorial देखें।

विशेष रूप से अनुभाग "चरण 4: एक कस्टम सजावट के साथ त्रुटि संदेश हैंडलिंग।"

+0

क्या आपका मतलब चरण 5 विधेयक में अनुवादक का उपयोग करना है? ऐसा लगता है कि प्रत्येक त्रुटि प्रकार के लिए आपके डिफ़ॉल्ट संदेश की कई घोषणाओं की आवश्यकता होती है। – simonrjones

+0

नहीं, मेरा मतलब चरण 4 है। आप एक कस्टम त्रुटि सजावट लिख सकते हैं जो सभी संदेशों को इम्प्लोड करने के बजाय, ईमेल सत्यापनकर्ता से * पहला * संदेश लौटाता है। –

+0

ग्रेट लिंक! ऐसा लगता है कि कस्टम सजावटी एक और तरीका होगा (सिमोन्रोजन 'समाधान की तुलना में) जो मैं चाहता हूं उसे प्राप्त करने के लिए, हालांकि यह मुझे मॉन्टी पायथन के' मच्छर शिकार 'स्केच की याद दिलाता है ... जैसा कि, यह संभवतः यह प्राप्त करने के लिए थोड़ा भारी हाथ है , simonrjones 'समाधान की तुलना में। – kander

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