2009-08-13 11 views
8

मेरे पास एक नियंत्रक है जो सत्यापन करने के लिए किसी फॉर्म से इनपुट क्लास में इनपुट पास करता है। यदि सत्यापन सफल होता है तो मैं प्रवाह जारी रखने और नियंत्रक से जुड़े डिफ़ॉल्ट दृश्य को प्रस्तुत करने की अनुमति देना चाहता हूं।अलग दृश्य स्क्रिप्ट Zend?

मेरी समस्या यह है कि यदि सत्यापन सफल नहीं होता है तो मैं चाहता हूं कि मॉडल प्रमाणीकरण त्रुटि संदेशों को वापस पास करे और उन्हें एक अलग दृश्य में प्रदर्शित करे। मैं वैकल्पिक दृश्य पर त्रुटि संदेशों को कैसे सेट कर सकता हूं?

अग्रिम धन्यवाद।

उत्तर

4

आप एक अलग दृश्य में त्रुटि संदेशों को क्यों प्रदर्शित करना चाहते हैं? दृश्य में सशर्त क्यों नहीं बनाते? कुछ ऐसा है जैसे फॉर्म में त्रुटियां हैं तो संदेशों को गूंजें और गूंज फ़ॉर्म को गूंजें।

आप अपने संबंधित दृश्य के साथ किसी अन्य कार्रवाई को आगे बढ़ाने के लिए $ -> _ का उपयोग कर सकते हैं। आप जो भी चाहें उसके साथ गुजर सकते हैं। बस फॉर्म ऑब्जेक्ट को पास करें, इसमें सभी त्रुटि संदेश हैं। या आप कुछ त्रुटि संदेश या उन सभी को फॉर्म ऑब्जेक्ट से पुनर्प्राप्त कर सकते हैं और उन्हें एक दृश्य या क्रिया में भेज सकते हैं।

+0

शायद एक ही दृश्य के साथ जाना चाहिए। वैध विधि में मैं एक सत्यापन संदेश लौटा रहा हूं कि किस सत्यापन में विफल रहा है, उदाहरण के लिए आइटम, आइटम के बाहर की तारीख नहीं मिल सका। यदि यह गुजरता है तो मैं खाली लौटाता हूं तो सत्यापन में वापसी मूल्य खाली नहीं होने पर दृश्य में जांच करें? क्या यह आपका मतलब है – db83

+0

ऐसा लगता है कि आप मैन्युअल रूप से सत्यापन जांच कर रहे हैं। लेकिन वही वैधताएं हैं जो आगे हैं और फिर आपको यह जानने के लिए केवल $ फॉर्म-> isValid() को कॉल करने की आवश्यकता है ताकि सभी परीक्षण पास हो जाएं या नहीं। यदि आपको वैधता की आवश्यकता है जो ZF ऑफ़र नहीं करता है, तो आप अपने स्वयं के कस्टम सत्यापनकर्ता लिख ​​सकते हैं और इन्हें उसी तरह प्लग इन कर सकते हैं जैसे निर्मित सत्यापनकर्ता। तो आप उदाहरण के लिए जांच सकते हैं कि ($ form-> isValid()) और फिर या तो त्रुटि संदेश भेज दें और यदि आप $ form-> पॉप्युलेट का उपयोग करना चाहते हैं और पॉप्युलेट फॉर्म को दृश्य में भेजना चाहते हैं या सफलता संदेश भेज सकते हैं। – markus

+0

इसके अतिरिक्त आप हमेशा दृश्य में चेक भी बना सकते हैं। जैसे कि ($ form-> hasErrors) इसे दिखाएं, अन्यथा इसे दिखाएं। (! छद्म कोड!) – markus

11

खैर, नियंत्रक से आप उन्हें किसी अन्य नियंत्रक में एक और कार्रवाई रीडायरेक्ट कर सकते हैं:

$this->_forward($newactionname, 
         $newcontrollername, 
         $newmodulename, 
         Array($parameters_to_pass); 
    } 

या यदि आप बस सिर्फ एक अलग दृष्टिकोण फ़ाइल प्रस्तुत करना:

$this->render('index_alternative'); 
9

() _forward का उपयोग न करें यदि आप एक ही नियंत्रक में कार्रवाई रीडायरेक्ट कर रहे हैं, बस) कार्रवाई सीधे> $ इस- का उपयोग कर fooAction (, बल्कि इस से फोन -> _ आगे ('foo' ..

कारण प्रदर्शन और त्रुटियों का कारण हो सकता है जो कंट्रोलर के निर्माण के कारण हो सकता है। जब आप _forward को केवल predispatch को फिर से चलाने के लिए कहते हैं (जो कुछ अपेक्षित है) लेकिन init() और कन्स्ट्रक्टर को भी बुलाया जाता है दोबारा। यदि आपके नियंत्रक को अन्य नियंत्रकों से विस्तारित किया गया है, तो उन सभी नियंत्रकों की तुलना में उनके init() सहित भी कहा जाएगा। यदि आपके पास init() में कोड है तो यह दो बार चलाएगा, और यदि आप डेटाबेस में लिख रहे हैं यह लाइन दो बार लिख देगा! पूरी चीज से बचें और सीए सीधे कार्रवाई करेंगे और इसके बजाय $-> प्रस्तुत करें() का उपयोग करें।

यदि आप अपना कोड प्रोफ़ाइल करते हैं, तो आप आसानी से इस समस्या को देख सकते हैं,

+0

+1 दोस्त, मुझे विश्वास नहीं है कि थर्कुन ने रीडायरेक्ट करने के लिए कहा था। :/ –

+0

+1, मैं इसे टैप करता हूं! – Marecky

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