Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

एक PHP5 फ्रेमवर्क बनाएँ - भाग 2

by
Difficulty:IntermediateLength:LongLanguages:

Hindi (हिंदी) translation by Ashish Rampal (you can also view the original English article)

हमारे फ्रेमवर्क के लिए बेसिक स्ट्रक्चर के साथ, यह समय फंक्शनलिटी जोड़ना शुरू करने का है। इस ट्यूटोरियल में हम एक टेम्पलेट मैनेजर और डेटाबेस हैंडलर बनाएंगे, जिससे हमें लगभग किसी भी प्रोजेक्ट में उपयोग के लिए एक शक्तिशाली फ्रेमवर्क के करीब एक कदम मिल जाएगा। यदि आपने पहले से नहीं किया हैं, तो पहले इस सीरीज के भाग 1 की समीक्षा करना सुनिश्चित करें!




MVC: स्ट्रक्चर को ट्विक करें

इस ट्यूटोरियल के पहले भाग में, हमने अपने ऍप्लिकेशन्स के लिए बिज़नेस लॉजिक को स्टोर करने के लिए controllers नामक एक फ़ोल्डर बनाया है। जैसा कि daok ने एक कमेंट में बताया, यह सभी बिज़नेस लॉजिक के लिए सबसे अच्छी जगह नहीं है, और इस लॉजिक को स्टोर करने के लिए model का उपयोग किया जाना चाहिए। पहले, मैंने हमेशा अपने अधिकांश ऍप्लिकेशन्स में मॉडल के रूप में डेटाबेस का उपयोग किया है, हालांकि, इसे थोड़ा और अलग करने से हमारा फ्रेमवर्क और भी शक्तिशाली और एक्सटेंड करना आसान हो जाएगा।

तो, MVC क्या है? MVC एक डिजाइन पैटर्न है (जैसा कि सिंगलटन और रजिस्ट्री पैटर्न था जिसे हमने भाग 1 में देखा था), और यह मॉडल व्यू कंट्रोलर के लिए है, और इस पैटर्न का उद्देश्य बिज़नेस लॉजिक, यूजर इंटरफ़ेस एक्शन्स और यूजर इंटरफ़ेस को अलग करना है एक दूसरे से। यद्यपि हम अभी तक हमारे मॉडल और कंट्रोलर्स के साथ कुछ भी नहीं करने जा रहे हैं, आइए "models" फ़ोल्डर को शामिल करने के लिए हमारे फ्रेमवर्क फ़ोल्डर स्ट्रक्चर को अपडेट करें। मॉडल में मुख्य बिज़नेस लॉजिक होगा, और कंट्रोलर यूजर इंटरैक्शन से निपटेंगे (उदाहरण के लिए डेटा सबमिट करना, जैसे कोई कमेंट)। NB: हमारे __autoload फ़ंक्शन को बदलने की आवश्यकता नहीं है।

डेटाबेस हैंडलर

PHP का उपयोग करने वाली अधिकांश वेबसाइटें और वेब एप्लिकेशन भी डेटाबेस इंजन का उपयोग करते हैं, जैसे MySQL। यदि हम अपने सभी डेटाबेस से संबंधित फंक्शन्स को एक ही स्थान पर रखते हैं, तो हम (सैद्धांतिक रूप में) डेटाबेस इंजन को आसानी से बदल सकते हैं। हम कुछ ख़ास ऑपरेशन को आसान बना सकते हैं, जैसे रिकॉर्ड डालना, रिकॉर्ड अपडेट करना या डेटाबेस से रिकॉर्ड्स हटाना। यह कई डेटाबेस कनेक्शन से निपटने के दौरान भी आसान बना सकता है।

तो...हमारे डेटाबेस हैंडलर को क्या करना चाहिए:

  • डेटाबेस में कनेक्शन मैनेज करें
  • डेटाबेस से कुछ लेवल का अब्स्ट्रक्शन प्रदान करने का प्रयास करें
  • क्वेरी को Cache करें ताकि हम बाद में उनका उपयोग कर सकें
  • सामान्य डेटाबेस ऑपरेशन को आसान बनाएं

आइए हमारे डेटाबेस हैंडलर के लिए कोड देखें, फिर हम इसके बाद चर्चा करेंगे।

इसे अधिक विस्तार से चर्चा करने से पहले, मुझे यह पॉइंट आउट करना चाहिए कि यह डेटाबेस हैंडलर बहुत बेसिक है। हम सीधे क्वेरी को एक्सेक्यूट नहीं करके पूर्ण अब्स्ट्रक्शन प्रदान कर सकते हैं, लेकिन इसके बजाय पैरामीटर पर आधारित क्वेरी फ़ंक्शन पर क्वेरी का निर्माण करना और फिर इसे एक्सेक्यूट करना।

हमारे डिलीट, इन्सर्ट और अपडेट मेथड्स कुछ सामान्य टास्कस को परफॉर्म करना आसान बनाता है (जैसा कि मैंने ऊपर उल्लेखित किया है, हम इसे और अधिक करने के लिए एक्सटेंड कर सकते हैं), केवल टेबल नाम, फ़ील्ड का एक array और करेस्पोंडिंग वैल्यू जैसी जानकारी प्रदान करके, वैल्यूज और कंडीशंस को सीमित करें। क्वेरी को "cached" भी किया जा सकता है ताकि हम बाद में उनके साथ चीजें कर सकें। मुझे यह सुविधा मिलती है (साथ ही डेटा के "cache" array की क्षमता) टेम्पलेट मैनेजर के साथ मिलकर बहुत आसान होती है, क्योंकि हम डेटा की row के माध्यम से आसानी से पुन: प्रयास कर सकते हैं और इसे अपने टेम्पलेट्स में थोड़ा झगड़ा कर सकते हैं, जैसा कि आप करेंगे देखें जब हम टेम्पलेट मैनेजर को देखते हैं।

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

हम इस क्लास को कैसे एक्सटेंड करना चाहते हैं?

  • फुल अब्स्ट्रक्शन
  • इनहेरिटेंस का उपयोग करें, एक इंटरफ़ेस बनाएं और डेटाबेस क्लास से इसका इन्हेरिट हो, हर डेटाबेस इंजन
  • के लिए अलगक्वेरी को cache करते समय क्वेरी के साथ कनेक्शन id को स्टोर करें
  • डेटा को सनिटीज़ (sanitize) करने के लिए इच्छित डेटा के प्रकार के आधार पर डेटा सनिटीज़िंग (sanitizing) में सुधार करें

टेम्पलेट मैनेजर

टेम्पलेट मैनेजर सभी आउटपुट को संभालेगा, इसे विभिन्न अलग-अलग टेम्पलेट फाइलों के साथ काम करने में सक्षम होना चाहिए, प्लेसहोल्डर को रीप्लेस करें (मैं उन्हें टैग कहता हूं) डेटा के साथ और डेटाबेस से डेटा की कई rows के साथ टेम्पलेट के हिस्सों के माध्यम से इटरेट करता हूं।

चीजों को आसान बनाने के लिए, हम पेज से संबंधित कंटेंट को शामिल करने के लिए page क्लास का उपयोग करेंगे, इससे हमारे लिए इसे एक्सटेंड करना और बाद में फीचर्स को जोड़ना आसान हो जाता है। टेम्पलेट मैनेजर इस ऑब्जेक्ट को मैनेज करेगा।

तो, यह क्लास वास्तव में क्या करती है?

हमारा पेज ऑब्जेक्ट बनाता है, और इसे टेम्पलेट फ़ाइलों से बेस करता है, पेज ऑब्जेक्ट में कंटेंट और जानकारी होती है जो पेज के HTML को बनाने के लिए आवश्यक होती है। इसके बाद हम अपने पेज के लिए प्रारंभिक कंटेंट प्राप्त करने के लिए FromTemplate ('templatefile.tpl.php', 'templatefile.tpl.php', 'templatefile2.tpl.php') बनाते हैं, यह मेथड किसी भी टेम्पलेट फ़ाइलों को इसके आर्गुमेंट के रूप में लेती है, और इसके लिए उपयोगी होती है हैडर, कंटेंट और फुटर टेम्पलेट्स।

पेज ऑब्जेक्ट को पेज में रीप्लेस करने के लिए डेटा के रिकॉर्ड को बनाए रखने में मदद करके पेज से जुड़े कंटेंट को मैनेज करता है, और अतिरिक्त टेम्पलेट बिट्स जिन्हें पेज में शामिल करने की आवश्यकता होती है (addTemplateBit ('userbar', 'usertoolsbar.tpl.php '))।

पेज कंटेंट पर विभिन्न रीप्लेस ऑपरेशन करके पेज पर डेटा और कंटेंट जोड़ता है, जिसमें cache किए गए क्वेरी से परिणाम रिट्रीव करना और उन्हें पेज पर जोड़ना शामिल है।

टेम्पलेट फ़ाइल को अपने आप को मार्क करने की आवश्यकता है जहां एक cache किए गए क्वेरी को रिट्रीव करने की आवश्यकता होती है और क्वेरी से डेटा बदल दिया जाता है। जब टेम्पलेट मैनेजर एक टैग को रीप्लेस करने के लिए एक टैग से मुकाबला करता है, तो यह उस पेज का हिस्सा हो जाता है जहां उसे पेज ऑब्जेक्ट पर getBlock('block') को कॉल करके पुन: प्रयास करने की आवश्यकता होती है। कंटेंट के इस हिस्से को फिर क्वेरी में प्रत्येक रिकॉर्ड के लिए कॉपी किया जाता है, और उसके भीतर टैग को क्वेरी के परिणामों के साथ रीप्लेस किया जाता है। हम इस ट्यूटोरियल में बाद में टेम्पलेट कैसा दिखता हैं, इस पर एक नज़र डालेंगे।

टेम्पलेट मैनेजर: पेज

पेज ऑब्जेक्ट टेम्पलेट मैनेजर द्वारा मैनेज किया जाता है, और इसमें पेज से संबंधित सभी details शामिल होते हैं। यह टेम्पलेट मैनेजर को मैनेज करने के लिए स्वतंत्र छोड़ देता है, जबकि इसे बाद की तारीख में इसकी फंक्शनलिटी को एक्सटेंड करना आसान बनाता है।

इस क्लास को कैसे एक्सटेंड किया जा सकता है और इसमें सुधार किया जा सकता है?

  • PostParseTags: अधिकांश पेज के पार्स होने के बाद आप टैग बदलना चाहेंगे, शायद डेटाबेस के कंटेंट में ऐसे टैग होते हैं जिन्हें पार्स करने की आवश्यकता होती है।
  • पासवर्ड वाले page: किसी पेज पर पासवर्ड असाइन करें, यह देखने के लिए जांचें कि यूजर के पास कुकी या सेशन में पासवर्ड है या नहीं, ताकि उन्हें पेज देखने की अनुमति मिल सके।
  • रिस्ट्रिक्टेड पेज बदलना (हालांकि हमें पहले हमारे ऑथेंटिकेशन कंपोनेंट्स की आवश्यकता है!)
  • पेज या एप्लिकेशन के
  • आधार पर जावास्क्रिप्ट और CSS फ़ाइलों को डायनामिक रूप से रिफरेन्स जोड़ना।

कोर ऑब्जेक्ट्स को लोड करें

अब हमारे पास कुछ ऑब्जेक्ट्स हैं जो हमारी रजिस्ट्री हमारे लिए स्टोर करने जा रहे हैं, हमें इन ऑब्जेक्ट्स के बारे में रजिस्ट्री को बताने की ज़रूरत है। मैंने PCARegistry ऑब्जेक्ट में एक मेथड बनाया है जिसे loadCoreObjects कहा जाता है यह (जैसा कि यह कहता है) कोर ऑब्जेक्ट्स को लोड करता है। इसका मतलब यह है कि इन ऑब्जेक्ट्स के साथ रजिस्ट्री को लोड करने के लिए बस इससे हमारी index.php फ़ाइल से कॉल कर सकते हैं।

रजिस्ट्री को लोड करने वाले अन्य कोर ऑब्जेक्ट्स को शामिल करने के लिए बाद में इस मेथड को बदला जा सकता है, निश्चित रूप से ऐसे ऑब्जेक्ट्स हो सकते हैं जिनसे हम अपनी रजिस्ट्री को मैनेज करना चाहते हैं, लेकिन केवल फ्रेमवर्क के लिए उपयोग किए जाने वाले एप्लिकेशन के आधार पर। इन ऑब्जेक्ट्स को इस मेथड के बाहर लोड किया जाएगा।

कुछ डाटा

ताकि हम अपने फ्रेमवर्क में जोड़े गए नए फीचर्स का प्रदर्शन कर सकें, हमें डेटाबेस हैंडलर का उपयोग करने के लिए डेटाबेस की आवश्यकता है, और कुछ टेम्पलेट मैनेजमेंट फ़ंक्शन (जहां हम डेटाबेस में rows के साथ कंटेंट के ब्लॉक को रीप्लेस करते हैं)।

डेमोंस्ट्रेशन साइट जो हम ट्यूटोरियल्स की इस सीरीज के अंत तक हमारे फ्रेमवर्क के साथ करेंगे, एक मेम्बर्स डायरेक्टरी वाली वेबसाइट है, इसलिए चलिए मेंबर प्रोफाइल के लिए एक बहुत ही बेसिक डेटाबेस टेबल बनाते हैं, जिसमें एक id, name और email एड्रेस होता है।

जाहिर है, हमें इस टेबल में डाटा की कुछ rows की आवश्यकता है!

एक क्विक टेम्पलेट

कुछ भी प्रदर्शित होने के लिए, हमें एक बेसिक टेम्पलेट की आवश्यकता है, जहां हम अपने मेंबर्स की टेबल से डाटा लिस्ट करेंगे।

START मेंबर और END मेंबर HTML कमैंट्स मेंबर ब्लॉक को डेनोट करती हैं (जो पेज पर getBlock() मेथड के माध्यम से प्राप्त की जाती है), यह वह जगह है जहां टेम्पलेट मैनेजर डेटाबेस में रिकॉर्ड्स के माध्यम से पुन: प्रयास करेगा और उन्हें प्रदर्शित करेगा।

उपयोग करते हुए फ्रेमवर्क

अब, हमें यह सब एक साथ लाने की जरूरत है, हमारी index.php फ़ाइल के साथ:

अगर हम अब इस पेज को हमारे वेब ब्राउज़र में देखते हैं, तो क्वेरी के परिणाम पेज पर डिस्प्ले होते हैं:

भाग 3 में आ रहा है...

भाग तीन में हम अपने फ्रेमवर्क के डेवलपमेंट साइड से थोड़ी सी चक्कर लगाएंगे, और देखेंगे कि हमारे फ्रेमवर्क के साथ कैसे डिजाइन किया जाए, और HTML टेम्पलेट्स को कैसे स्लाइस किया जाए ताकि वे हमारे फ्रेमवर्क के लिए उपयुक्त हों। जब हम अपने फ्रेमवर्क के साथ अपना पहला एप्लीकेशन बनाना शुरू करते हैं, तो हम इन क्लासेज के कुछ फंक्शन्स में अधिक जानकारी देखेंगे। अंत में, पिछली बार आपके कमैंट्स के लिए धन्यवाद!

  • अधिक डेली वेब डेवलपमेंट टुट्स और आर्टिकल्स के लिए NETTUTS RSS Feed की सदस्यता लें।


Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.