2009-10-08 23 views
8

मैं कोहाना का उपयोग कर रहा हूं, लेकिन मुझे लगता है कि यह सवाल अधिक सामान्य है।एमवीसी परियोजना में सत्यापन कहां होना चाहिए?

मैं नियंत्रक में फॉर्म सत्यापन कर रहा हूं, और यह अब तक अच्छी तरह से काम कर रहा है। लेकिन हाल ही में, मैं एक समस्या में भाग गया है।

मेरे पास एक टिप्पणी मॉडल है, और मैं इसे कुछ अलग नियंत्रकों से टिप्पणियां भेजता हूं। प्रत्येक नियंत्रक में एक वैधकर्ता होने के बजाय, मैंने इसे मॉडल में रखा।

यह बहुत अच्छा है क्योंकि

  • केवल एक ही स्थान पर/बदलने के लिए सत्यापन नियमों (सूखी)

जोड़ने यह बेकार है क्योंकि

  • मैं स्पष्ट रूप से एक सफलता या विफलता वापस जाने के लिए की जरूरत है नियंत्रक के लिए, और कोहाना की सत्यापन लाइब्रेरी त्रुटियों को एक सरणी के रूप में लौटाती है। तो मेरी वापसी असफल

    array('success' => false, $errors); 
    

    मैं मदद नहीं कर सकता लेकिन लगता है कि यह गलत है पर सफलता

    array('success' => true); 
    

    पर इस

तरह दिखता है। यह गलत लगता है।

अगर मैं नियंत्रक में कर, मैं बस कर सकते हैं

if ($post->validate()) { 
    doWhatever(); 
} else { 
    $this->template->formErrors = $post->errors('form_errors'); 
} 

कौन सा बेहतर लगता है (मेरे लिए)।

क्या ऐसा करने का कोई बेहतर तरीका है? क्या मुझे नियंत्रक या विधि में मान्य करना चाहिए? क्या मैं पागल हो रहा हूँ?

+0

इस तरह मैं यह करता हूं और फिर यह तय करने के लिए सफलता सूचकांक की जांच करता हूं कि क्या करना है (कोहोन के साथ नहीं, बल्कि आम तौर पर।) –

उत्तर

4

मैं ईमानदारी से आपकी विधि, एलेक्स के साथ कुछ भी गलत नहीं देखता हूं। ऐसा लगता है कि आप इसे ठीक से कर रहे हैं। आप डीआरवाई सिद्धांत का पालन कर रहे हैं, जो मेरे लिए आमतौर पर मापने के लिए यार्ड है यदि मैं एमवीसी की बात करता हूं तो मैं कुछ सही कर रहा हूं।

0

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

0

आपको हमेशा (यदि आप कर सकते हैं) क्लाइंट (जेएस) पर मान्य होना चाहिए। और चूंकि इसे छोड़ दिया जा सकता है - आप सर्वर पर भी मान्य हैं। और हाँ - कुछ पुन: प्रयोज्य रूप में अपना सत्यापन डालना बहुत अच्छा विचार है

+0

जब तक आप अपने जवाब को आगे बढ़ाना नहीं चाहते हैं - यह बताए जाने की सौजन्य दें कि आप क्यों दे रहे हैं -1 इस जवाब के लिए। क्लाइंट पर मान्य - समझ में आता है कि यह कहीं अधिक तेज़ है तो सर्वर पर वापस जाएं। लेकिन अकेले ग्राहक पर भरोसा करना खतरनाक है क्योंकि इसे आसानी से घुमाया जा सकता है। इसलिए मेरा उत्तर – Bostone

+0

मुझे लगता है कि आपको केवल टिप्पणी में न केवल उत्तर में अधिक प्रयास करना चाहिए। सिर्फ एक न्यायाधीश होने के लिए, मैंने उस बेस्टर्ड डाउनवॉटर की तुलना की। :) – pestaa

+0

धन्यवाद :) मेरे सभी जवाब इस छोटे से नहीं हैं। मैं सिर्फ कोरस को अपनी आवाज़ जोड़ने की कोशिश कर रहा था – Bostone

2

वसा मॉडल। छोटे नियंत्रक। जिस तरह से मैंने हमेशा ऐसा किया। मेरे लिए सत्यापन डेटा परत पर है। डेटा परत (मेरे लिए, कम से कम) मॉडल है। मैं आमतौर पर केकेपीएचपी का उपयोग अपने एमवीसी फ्रेमवर्क के रूप में करता हूं ... शायद यही कारण है कि मेरा सत्यापन मॉडल पर है। यह केकपीएचपी का तरीका है।

0

मैं मॉडल में भी सत्यापन करता हूं। ओआरएम, ऑटो_Modeler आदि जैसे अधिकांश मॉडलिंग libs भी सत्यापन का समर्थन करते हैं। बीटीडब्ल्यू यदि आप फ्रीनोड (irc.freenode.net) पर # कोहाना चैनल से पूछते हैं तो यह तेज़ है।हम (आमतौर पर) काटने नहीं करते :)

6

मुझे नहीं लगता कि सभी सत्यापन नियम मॉडल के अंदर जा सकते हैं। प्रमाणीकरण फॉर्म (या एपीआई) के बारे में है। तथ्य यह है कि जब आप अपने डेटा को मान्य कर रहे हैं, तो अधिकांश चीजें संदर्भ पर निर्भर करती हैं।

उदाहरण के लिए, क्या यह एक लॉग-इन उपयोगकर्ता कार्रवाई कर रहा है? मॉडल को सत्यापित किए जाने के साथ आप अपनी प्रमाणीकरण परत को जोड़े नहींंगे। तो, सभी चेक नियंत्रक के अंदर जाना चाहिए। मॉडल संदर्भ-अज्ञेयवादी है; फॉर्म नियंत्रक के लिए "संबंधित" है और संदर्भ-जागरूक है।

मुझे लगता है कि अच्छी तरह से गठित डेटा के लिए प्रति-प्रपत्र सत्यापन नियमों प्लसबुनियादी में मॉडल के चेक होने जाने का रास्ता है। यदि आप अपने मॉडल के वैध() फ़ंक्शन के अंदर Auth :: instance() या सत्र :: इंस्टेंस() को कॉल कर रहे हैं, तो आप इसे गलत कर रहे हैं।

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