मैं कोडइग्निटर का उपयोग करके एक वेबपैप लिख रहा हूं जिसके लिए प्रमाणीकरण की आवश्यकता है। मैंने एक मॉडल बनाया जो मेरे सभी प्रमाणीकरण को संभालता है। हालांकि, मुझे इस प्रमाणीकरण मॉडल को किसी अन्य मॉडल के अंदर से एक्सेस करने का कोई तरीका नहीं मिल रहा है। क्या किसी अन्य मोड के अंदर से किसी मॉडल को एक्सेस करने का कोई तरीका है, या कोडइग्निटर के अंदर प्रमाणीकरण को संभालने का एक बेहतर तरीका है?क्या आप कोडइग्निटर में किसी अन्य मॉडल के अंदर से एक मॉडल तक पहुंच सकते हैं?
उत्तर
सामान्य रूप से, आप किसी ऑब्जेक्ट के अंदर ऑब्जेक्ट्स बनाना नहीं चाहते हैं। यह एक बुरी आदत है, इसके बजाय, एक स्पष्ट एपीआई लिखें और अपने मॉडल में एक मॉडल इंजेक्ट करें।
<?php
// in your controller
$model1 = new Model1();
$model2 = new Model2();
$model2->setWhatever($model1);
?>
अपने मॉडल में प्रमाणीकरण संभाल न करें। केवल अपने डेटाबेस, या ldap या जो कुछ भी के साथ इंटरफेस करने के लिए मॉडल का उपयोग करें।
मैंने एक ऑथ लाइब्रेरी बनाई है जिसका उपयोग मैं प्रमाणीकरण और प्रमाणीकरण को प्रबंधित करने के लिए करता हूं। आप अपने नियंत्रकों से इस तरह की लाइब्रेरी तक पहुंच सकते हैं।
मैं हमेशा एक मॉडल के अंदर अपने ओथ कार्यान्वयन डालता हूं, मुझे प्रमाणीकरण कोड –
के साथ अपने नियंत्रकों को मकिंग करना पसंद नहीं है, मैं एक MY_controller बना देता हूं और वहां सब कुछ करता हूं। – tomexsans
ऐसा लगता है कि आप मॉडल के अंदर मॉडल लोड कर सकते हैं, हालांकि आपको शायद इसे किसी अन्य तरीके से हल करना चाहिए। एक चर्चा के लिए CodeIgniter forums देखें।
class SomeModel extends Model
{
function doSomething($foo)
{
$CI =& get_instance();
$CI->load->model('SomeOtherModel','NiceName',true);
// use $CI instead of $this to query the other models
$CI->NiceName->doSomethingElse();
}
}
इसके अलावा, मुझे नहीं पता कि टिल क्या कह रहा है कि आपको वस्तुओं के अंदर वस्तुओं को नहीं बनाना चाहिए। बेशक आपको चाहिए! ऑब्जेक्ट्स भेजना तर्क के रूप में मुझे बहुत कम स्पष्ट दिखता है।
शिकायत यह है कि ऐसा करने से अनावश्यक रूप से एक मजबूत निर्भरता पैदा होती है जो दो मॉडलों को betweeen बनाता है। जब आप परीक्षण कर रहे हों, उदाहरण के लिए, SomeModel को SomeOtherModel का एक नकली संस्करण देने में सक्षम होना अच्छा लगता है; यदि आप पूर्व को बाद में लोड कर रहे हैं तो आप ऐसा नहीं कर सकते हैं। या फिर आप उसी इंटरफ़ेस के साथ एक अलग मॉडल का उपयोग करने के लिए कोड को संशोधित करते हैं, जैसे कि जब आप प्लगइन सिस्टम का उपयोग करने के लिए मौजूदा कोड को दोबारा कर रहे हों। –
Google का एक ओपन सोर्स निर्भरता इंजेक्शन ढांचा है। यह जावा के लिए है लेकिन यह पेशेवरों और निर्भरता इंजेक्शन के कुछ विपक्ष बताता है। http://code.google.com/p/google-guice/ –
@ रोब हावर्ड इस तरह की चीज है कि निर्भरता इंजेक्शन बहुत दूर है। आपके द्वारा उपयोग की जाने वाली प्रत्येक वस्तु को इंजेक्ट करना आवश्यक नहीं है, क्योंकि आपके द्वारा उपयोग की जाने वाली प्रत्येक वस्तु को अलगाव में परीक्षण करने की आवश्यकता नहीं है। इसके बजाय आप उन प्रणालियों और मॉड्यूल का परीक्षण करना चाहते हैं जो पूरी तरह से मिलकर काम करते हैं और उन्हें एक दूसरे से अलग करने और इंजेक्शन की आवश्यकता होती है। –
मॉडल के भीतर एक मॉडल लोड करना अब नए कोडइग्निटर के साथ संभव है।
- 1. टेम्पलेट से मॉडल तक पहुंच
- 2. रेल मॉडल तक पहुंच [: नोटिस] मॉडल में
- 3. क्या आप इसके मॉडलफॉर्म से Django मॉडल "प्रॉपर्टी" तक पहुंच सकते हैं?
- 4. रेल तक पहुंच मॉडल
- 5. मिडलवेयर से मॉडल तक पहुंच - डीजेंगो
- 6. कोड-पीछे से रूटडेटा तक आप कैसे पहुंच सकते हैं?
- 7. क्यूएमएल में एक सूचीदृश्य से आप वर्तमान इटैम की भूमिकाओं तक कैसे पहुंच सकते हैं?
- 8. backbone.js - एक क्लिक ईवेंट से मॉडल तक पहुंच
- 9. क्या एक वेब एपीआई ActionFilterAttribute मॉडल तक पहुंच सकता है?
- 10. क्या आप IENumerable तक पहुंच सकते हैं क्योंकि आप इसे लौट रहे हैं?
- 11. पहुँच कैनकैन के `कर सकते हैं` एक मॉडल से विधि
- 12. क्या आप jquery में किसी अन्य AJAX कॉल के अंदर AJAX कॉल कर सकते हैं?
- 13. रेल: मॉडल विधि से क्षेत्र मूल्य तक पहुंच
- 14. क्या आप मॉडल के लिए एकाधिक मॉडल एडमिन्स पंजीकृत कर सकते हैं? वैकल्पिक?
- 15. * अन्य * कारखानों में factory_girl कारखानों तक पहुंच
- 16. दो अन्य मॉडल "belong_to" मॉडल कर सकते हैं और एक घोंसला संबंध है?
- 17. एक इंस्टेंस वैरिएबल के माध्यम से आप किसी साझा/स्थैतिक सदस्य तक क्यों नहीं पहुंच सकते?
- 18. SQL सर्वर: क्या आप केवल एक तालिका तक पहुंच सीमित कर सकते हैं
- 19. क्या आप कोको टच में मानक स्थानीय तारों तक प्रोग्रामेटिक रूप से पहुंच सकते हैं?
- 20. क्या केकेपीएचपी में मॉडल के कई टेबल हो सकते हैं?
- 21. क्या आप RedirectToAction के साथ एक मॉडल पास कर सकते हैं?
- 22. सीधे पहुंच से जेएसपी पृष्ठ छुपाएं, लेकिन आप लक्ष्य पृष्ठ तक कैसे पहुंच सकते हैं?
- 23. क्या मॉडल में django आलसी लोड फ़ील्ड कर सकते हैं?
- 24. एमवीवीएम में दृश्य-मॉडल के मॉडल और व्यापार तर्क से आप तर्क को कैसे देखते हैं?
- 25. विम: क्या आप किसी अन्य पंक्ति से एक विशिष्ट लाइन नंबर हटा सकते हैं?
- 26. क्या जेनकिंस अपने आप से संग्रहित कलाकृतियों तक पहुंच सकते हैं?
- 27. किसी अन्य वर्ग से निजी विधि तक पहुंच
- 28. mysql_fetch_object के माध्यम से आप उनमें से किसी स्थान के साथ कॉलम तक कैसे पहुंच सकते हैं?
- 29. एक मणि के अंदर ActiveRecord मॉडल परीक्षण?
- 30. त्रुटि स्थिति में एम्बर डेटा मॉडल के साथ आप क्या कर सकते हैं?
क्या यह एक अच्छा अभ्यास है? क्योंकि मॉडल 2 के उपयोगकर्ता को यह जानना है कि यह मॉडल 1 पर निर्भर है। अच्छा अभ्यास क्या है? – Sabya
हां, निर्भरता को "इंजेक्ट" करने के लिए बेहतर अभ्यास, बनाम मॉडल 1 के अंदर मॉडल 2 को प्रारंभ करना। – Till
यह एक DRY दृष्टिकोण से अच्छा नहीं लगता है। क्या होगा यदि मेरे पास कोई ऐसा फ़ंक्शन है जो एक मॉडल के पहलू को बदलता है और किसी अन्य मॉडल के लिए एक क्रिया को ट्रिगर करता है? – wag2639