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

PHP में बिल्डिंग रिबिट

by
Difficulty:AdvancedLength:LongLanguages:

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

इस श्रृंखला में प्रारंभिक प्रविष्टि में, हमने रिबिट नामक हमारे ट्विटर-क्लोन के यूआई-पहलू का ख्याल रखा। अब, हम कई भाषाओं में आवेदन कोडिंग शुरू कर देंगे। यह सबक मानक PHP का लाभ उठाने (देसी MVC के साथ) होगा, लेकिन, भविष्य के लेख में, हम ऐसी रेल या Laravel के साथ के रूप में अंय implementations, समीक्षा करेंगे ।

वहां एक बहुत को कवर है, तो चलो शुरू हो जाओ ।


हम कहां पिछले बंद छोड़ दिया


Ribbit

अपरिचित के लिए, MVC मॉडल को देखने के नियंत्रक के लिए खड़ा है । आप डेटाबेस-HTML-तर्क कोड के रूप में MVC की बात कर सकते हैं । अपने कोड को इन अलग भागों में अलग करने से आपके ऐप्लिकेशन के बाकी हिस्सों में हस्तक्षेप किए बिना एक या अधिक घटकों को बदलना आसान हो जाता है. जैसा कि आप नीचे देखेंगे, अमूर्त के इस स्तर पर भी आप छोटे, संक्षिप्त कार्य है कि निचले स्तर के कार्यों पर निर्भर लिखने के लिए प्रोत्साहित करती है ।

मैं जब आवेदन के इस प्रकार के निर्माण मॉडल के साथ शुरू की तरह-सब कुछ (I.E. साइनअप, पोस्ट, आदि) से कनेक्ट करने के लिए जाता है । चलो डाटाबेस के सेटअप ।


को डेटाबेस

हम इस अनुप्रयोग के लिए चार तालिकाओं की आवश्यकता है । वे कर रहे हैं:

  • प्रयोक्ता-उपयोगकर्ता की जानकारी रखती है ।
  • Ribbits-वास्तविक Ribbits (पोस्ट) शामिल हैं ।
  • इस प्रकार है-जो इस प्रकार की सूची कौन ।
  • UserAuth-लॉगिन प्रमाणन धारण करने के लिए तालिका

मैं तुंहें दिखाता हूं कैसे टर्मिनल से इन तालिकाओं को बनाने के लिए । यदि आप किसी व्यवस्थापक प्रोग्राम (जैसे phpMyAdmin) का उपयोग करते हैं, तो आप या तो सीधे आदेश दर्ज करें या तालिका GUI के माध्यम से जोड़ने के लिए SQL बटन क्लिक कर सकते हैं ।

प्रारंभ करने के लिए, किसी टर्मिनल विंडो को खोलें, और निंन आदेश दर्ज करें:

यदि आप एक MySQL मशीन पर इस आदेश को चला रहे हैं, और पोर्ट नंबर संशोधित नहीं किया गया था, आप छोड़ सकते है-h
और-P तर्क । आदेश स्थानीय होस्ट और पोर्ट ३३०६, क्रमशः करने के लिए डिफ़ॉल्ट है । एक बार जब आप लॉगिन, आप निंनलिखित एसक्यूएल का उपयोग कर डेटाबेस बना सकते हैं:

चलो उपयोगकर्ता तालिका बनाने के द्वारा शुरू:

यह हमें निंनलिखित सारणी देता है:


उपयोगकर्ता तालिका

मैं जो अगली तालिका बनाना चाहता हूं वह Ribbits तालिका है । इस तालिका में चार फ़ील्ड होने चाहिए: id, user_id, ribbit और created_at । इस तालिका के लिए SQL कोड है:


Ribbits तालिका

यह काफी सरल सामान है, तो मैं बहुत ज्यादा विस्तृत नहीं होगा ।

अगले, इस प्रकार की मेज । यह केवल दोनों के अनुयाई और followee की आईडी रखती है:


शाख तालिका

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

एक असली दुनिया परियोजना में, आप ' hash2 ' या ' गुप्त ' की तरह एक और क्षेत्र को जोड़ने के लिए चाहते हो सकता है । यदि आप एक उपयोगकर्ता को प्रमाणित करने की जरूरत है एक हैश है, तो एक हमलावर ही है कि एक हैश लगता है । उदाहरण के लिए: मैं बेतरतीब ढंग से कुकी में हैश क्षेत्र में अक्षर दर्ज करें । यदि पर्याप्त उपयोगकर्ता हैं, यह सिर्फ किसी से मेल हो सकता है । लेकिन अगर आप को लगता है और मैच दो हैश, तो किसी को सही जोड़ी अनुमान लगाने का मौका तेजी से गिरता है (एक ही तीन जोड़ने, आदि के लिए लागू होता है) । लेकिन चीजों को सरल रखने के लिए, मैं केवल एक हैश होगा ।

यहां एसक्यूएल कोड है:

और इस अंतिम तालिका निंनलिखित छवि की तरह लग रहा है:


UserAuth तालिका

अब जब कि हम सभी टेबल सेटअप है, तो आप कैसे समग्र साइट काम करेंगे की एक बहुत अच्छा विचार होना चाहिए । हम अपने MVC ढांचे में मॉडल क्लास लिखना शुरू कर सकते हैं ।


इस मॉडल

एक फ़ाइल बनाएं, model. php कहा जाता है और निंनलिखित वर्ग घोषणा दर्ज करें:

यह आप परिचित लग रहा है अगर तुम अतीत में PHP कक्षाएं लिखा है । इस कोड को मूल रूप से एक वर्ग मॉडल बुलाया बनाता है । यह एक निजी $db जो एक mysqli वस्तु रखती है नाम संपत्ति है । निर्माता के अंदर, मैं अपने डेटाबेस के लिए कनेक्शन जानकारी का उपयोग कर $db गुण प्रारंभ । पैरामीटर क्रम है: पता, यूज़रनेम, पासवर्ड और डाटाबेस का नाम ।

इससे पहले कि हम किसी भी पृष्ठ विशेष कोड में मिलता है, मैं कुछ कम स्तर आज्ञाओं कि सार का चयन करें और डालने की तरह आम mySQL कार्यों बनाना चाहते हैं ।

पहली समारोह मैं लागू करना चाहते है चुनें () है । यह तालिका का नाम और जहां खंड के निर्माण के लिए संपत्तियों की एक सरणी के लिए एक स्ट्रिंग स्वीकार करता है । यहां पूरे समारोह है, और यह सही निर्माता के बाद जाना चाहिए:

फ़ंक्शन तालिका के नाम और गुणों की सरणी का उपयोग करके कोई क्वेरी स्ट्रिंग बनाता है. यह तो एक परिणाम वस्तु है जो हम mysqli क्वेरी () समारोह के माध्यम से क्वेरी स्ट्रिंग गुजर द्वारा प्राप्त देता है । अगले दो कार्य बहुत समान हैं; वे डालने() फ़ंक्शन और डिलीट() फ़ंक्शन हैं:

जैसा कि आप अनुमान लगाया हो सकता है, दोनों फ़ंक्शंस कोई SQL क्वेरी जनरेट करें और कोई परिणाम वापस । मैं एक और सहायक समारोह: मौजूद () समारोह में जोड़ना चाहते हैं । यह बस अगर एक पंक्ति निर्दिष्ट तालिका में मौजूद है की जांच करेगा । यहां समारोह है:

इससे पहले कि हम और अधिक पृष्ठ विशिष्ट कार्य करते हैं, हम शायद वास्तविक पृष्ठों करना चाहिए । यह फ़ाइल सहेजें और हम URL रूटिंग पर प्रारंभ करेंगे ।


को रूटर

एक MVC फ़्रेमवर्क में, सभी HTTP अनुरोध आमतौर पर किसी एकल नियंत्रक पर जाते हैं, और नियंत्रक अनुरोधित URL पर आधारित निष्पादित करने के लिए कौन सा फ़ंक्शन निर्धारित करता है । हम रूटर नामक एक वर्ग के साथ ऐसा करने के लिए जा रहे हैं । यह एक स्ट्रिंग (अनुरोधित पृष्ठ) स्वीकार करेगा और उस कंट्रोलर को निष्पादित करना चाहिए जो फ़ंक्शन का नाम वापस करेगा । आप इसके बारे में संख्या के बजाय समारोह के नाम के लिए एक फोन की किताब के रूप में सोच सकते हैं ।

यहां पूरा वर्ग की संरचना है; बस एक फ़ाइल रूटर. php बुलाया करने के लिए इस बचाओ:

इस वर्ग के मार्गों, जो हमारे नियंत्रकों के लिए "फोन की किताब" है बुलाया एक निजी संपत्ति है । वहां भी है एक साधारण समारोह लुकअप () कहा जाता है, जो एक स्ट्रिंग देता है अगर पथ मार्गों संपत्ति में मौजूद है । समय बचाने के लिए, मैं दस कार्यों कि हमारे नियंत्रक होगा सूची जाएगा:

सूची ' यूआरएल ' = > ' फंक्शन नेम ' के फॉर्मेट से जाती है । उदाहरण के लिए, यदि कोई ribbit.com/home को जाता है, तो रूटर नियंत्रक indexPage () फ़ंक्शन को निष्पादित करने के लिए कहता है ।

रूटर केवल आधा समाधान है; हम अपाचे बताने के लिए नियंत्रक के लिए सभी यातायात अनुप्रेषित की जरूरत है । हम इस साइट के रूट निर्देशिका में बुलाया. htaccess एक फ़ाइल बनाने और फ़ाइल के लिए निंनलिखित जोड़ने के द्वारा इस लक्ष्य को प्राप्त करेंगे:

यह थोड़ा डरा देता अगर तुम अपाचे mod_rewrite इस्तेमाल कभी नहीं किया है लग सकता है । लेकिन चिंता मत करो; मैं तुंहें लाइन से आईटी लाइन के माध्यम से चलना होगा ।

MVC फ़्रेमवर्क में, सभी HTTP अनुरोध आमतौर पर किसी एकल नियंत्रक पर जाते हैं.

पहली पंक्ति अपाचे mod_rewrite सक्षम करने के लिए कहता है; शेष पंक्तियाँ पुनर्लेखन नियम हैं । mod_rewrite के साथ, आप एक निश्चित यूआरएल के साथ एक इनकमिंग अनुरोध ले सकते है और एक अलग फ़ाइल पर अनुरोध पारित । हमारे मामले में, हम चाहते हैं कि हम उन्हें नियंत्रक के साथ प्रक्रिया कर सकते हैं एक एकल फाइल द्वारा नियंत्रित किया जा करने के लिए सभी अनुरोधों. mod_rewrite मॉड्यूल भी हमें अपने अनुप्रयोग के समग्र लग रहा है और अधिक पेशेवर ribbit.com/profile.php?username=username--making के बजाय ribbit.com/profile/username की तरह यूआरएल है देता है ।

मैंने कहा, हम सभी अनुरोधों के लिए एक एकल फाइल जाना चाहते हैं, लेकिन है कि वास्तव में सही नहीं है । हम Apache सामांय रूप से छवियां, सीएसएस फ़ाइलें, आदि जैसे संसाधनों के लिए अनुरोध संभाल करना चाहते है पहली बार पुनर्लेखन नियम Apache अनुरोधों को संभालने के लिए कहता है कि संसाधन के साथ शुरू एक नियमित रूप से फैशन में/। यह एक नियमित अभिव्यक्ति है कि शब्द संसाधन के बाद सब कुछ लेता है/(नोटिस समूहन कोष्ठक) और यह फ़ाइल के लिए वास्तविक यूआरएल के रूप में उपयोग करता है । तो उदाहरण के लिए: लिंक ribbit.com/Resource/css/main.css लोड ribbit.com/css/main.css पर स्थित फ़ाइल ।

अगले नियम अपाचे को बताता है खाली अनुरोध अनुप्रेषित (वेबसाइटों जड़ के लिए एक अनुरोध अर्थात्)/home. को

शब्द पंक्ति के अंत में वर्ग कोष्ठक में "अनुप्रेषित" अपाचे को वास्तव में ब्राउज़र अनुप्रेषित बताता है, के रूप में एक और (पिछले नियम में की तरह) यूआरएल पर लिखने का विरोध किया ।

वहां चमक के विभिंन प्रकार: त्रुटि, चेतावनी और नोटिस कर रहे हैं ।

पिछले नियम एक हम के लिए आया है; यह सभी अनुरोधों लेता है (उन है कि संसाधन के साथ शुरू के अलावा अंय/) और उंहें एक php फ़ाइल app. php बुलाया को भेजता है । जो नियंत्रक लोड करता है और पूरे अनुप्रयोग चलाता है कि फ़ाइल है ।

"^" प्रतीक स्ट्रिंग की शुरुआत का प्रतिनिधित्व करता है और "$" अंत का प्रतिनिधित्व करता है । तो नियमित अभिव्यक्ति के रूप में अंग्रेजी में अनुवाद किया जा सकता है: "यूआरएल की शुरुआत से पहले स्लेश तक सब कुछ ले लो, और यह 1 समूह में डाल दिया । तो स्लेश के बाद सब कुछ ले लो, और 2 समूह में डाल दिया । अंत में, Apache के लिए लिंक के रूप में अगर यह app. php कहा? page = group1 & वेरी = group2. " "[L]" है कि पहली और तीसरी पंक्ति में है अपाचे कहता है कि लाइन के बाद बंद करो । तो अगर अनुरोध एक संसाधन यूआरएल है, यह अगले नियम को जारी नहीं करना चाहिए; यह पहले एक के बाद टूट जाना चाहिए ।

मुझे आशा है कि सभी भावना बनाया; निंनलिखित चित्र बेहतर दिखाता है कि क्या हो रहा है ।

यदि आप अभी भी वास्तविक नियमित अभिव्यक्ति पर अस्पष्ट हैं, तो हम एक बहुत अच्छा लेख है कि आप पढ़ सकते हैं ।

अब है कि हम सब कुछ सेटअप यूआरएल वार है, चलो नियंत्रक बनाते हैं ।


को कंट्रोलर

नियंत्रक है जहां जादू का सबसे होता है; मॉडल और रूटर सहित अनुप्रयोग के सभी अन्य टुकड़े, यहाँ के माध्यम से कनेक्ट. चलो एक फाइल बनाने के द्वारा शुरू नियंत्रक. php बुलाया और निंनलिखित में दर्ज करें:

mod_rewrite के साथ, आप एक निश्चित यूआरएल के साथ एक इनकमिंग अनुरोध ले सकते है और एक अलग फ़ाइल पर अनुरोध पारित ।

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

यदि आपको याद है, तो क्वेरी में एकाधिक मान हो सकते है (हमने. htaccess फ़ाइल में लिखा है जो पहले स्लैश के बाद सब कुछ क्वेरी में डाल दिया जाता है--इसमें वे सभी स्लैश शामिल है जो अनुसरण कर सकते हैं) । तो हम स्लैश द्वारा क्वेरी स्ट्रिंग विभाजन, हमें कई क्वेरी मापदंडों अगर जरूरत पारित करने के लिए अनुमति दी ।

अगले, हम जो रूटर करने के लिए कार्य को निष्पादित करने के लिए निर्धारित करने के लिए $page चर में था पास । यदि रूटर एक स्ट्रिंग देता है, तो हम निर्दिष्ट समारोह कॉल और यह क्वेरी पैरामीटर पारित होगा । रूटर false देता है, तो नियंत्रक ४०४ स्थिति कोड भेजता है । आप एक कस्टम ४०४ देखने के लिए पृष्ठ अनुप्रेषित अगर तुम इतनी इच्छा कर सकते हैं, लेकिन मैं चीजों को सरल रखेंगे ।

रूपरेखा आकार लेने के लिए शुरू कर रहा है; अब आप किसी URL पर आधारित किसी विशिष्ट फ़ंक्शन को कॉल कर सकते हैं. अगले कदम के लिए नियंत्रक वर्ग के लिए कुछ कार्यों को जोड़ने के लिए है निचले स्तर के कार्यों, जैसे एक दृश्य लोड हो रहा है और पृष्ठ को पुनः निर्देशित करने का ख्याल रखना ।

पहला समारोह बस एक अलग पृष्ठ पर ब्राउज़र पुनर्निर्देशित करता है । हम यह एक बहुत कुछ करते हैं, तो यह एक अच्छा विचार है इसके लिए एक समारोह बनाने के लिए:

अगले दो फ़ंक्शंस एक दृश्य और एक पृष्ठ, क्रमशः लोड:

वैकल्पिक रूप से संलग्न सरणी से चर निकालने, पहले फ़ंक्शन "दृश्य" फ़ोल्डर से किसी एकल दृश्य लोड करता है । दूसरा समारोह हम एक संदर्भ होगा, और यह हेडर और पाद लेख लोड (वे उस पृष्ठ के लिए निर्दिष्ट दृश्य के आसपास सभी पंनों पर ही हैं) और किसी भी अंय संदेश (फ्लैश यानी एक त्रुटि संदेश, अभिवादन, आदि) ।

वहां एक अंतिम समारोह है कि हम को लागू करने की जरूरत है जो सभी पंनों पर आवश्यक है: checkAuth () समारोह है । यह फ़ंक्शन जांच करेगा कि क्या कोई उपयोगकर्ता साइन इन है, और यदि ऐसा है, तो उपयोगकर्ता के डेटा को पृष्ठ पर पास करें । अंयथा, यह false देता है । यहां समारोह है:

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

अब चलो मॉडल वर्ग में है कि समारोह को लागू करने ।


कुछ बाधाओं और समाप्त होता है

मॉडल वर्ग में, सही मौजूद () फ़ंक्शन के बाद, निम्न फ़ंक्शन जोड़ें:

यदि आप हमारे तालिकाओं याद है, हम एक UserAuth तालिका है कि एक उपयोगकर्ता नाम के साथ हैश शामिल है । यह SQL क्वेरी उस पंक्ति को पुनर्प्राप्त करती है जिसमें कुकी से हैश होता है और उपयोगकर्ता को मेल खाता उपयोगकर्ता नाम देता है ।

यह सब हम अब के लिए इस वर्ग में करना है । चलो नियंत्रक. php फ़ाइल में वापस जाओ और फ़्लैश वर्ग को लागू ।

loadPage () समारोह में, वहां एक फ्लैश ऑब्जेक्ट, एक संदेश है कि सभी सामग्री के ऊपर प्रकट होता है पारित करने के लिए एक विकल्प था ।

उदाहरण के लिए: यदि कोई अप्रमाणित उपयोगकर्ता कुछ पोस्ट करने का प्रयास करता है, तो अनुप्रयोग एक संदेश के समान प्रदर्शित करता है, "आपको उस क्रिया को करने के लिए साइन इन करना होगा." वहां चमक के विभिंन प्रकार: त्रुटि, चेतावनी और नोटिस कर रहे हैं, और मैंने फैसला किया कि यह एक फ्लैश वर्ग बनाने के बजाय कई चर गुजर (msg और प्रकार की तरह आसान है । इसके अतिरिक्त, वर्ग के लिए एक फ्लैश के HTML उत्पादन की क्षमता होगी ।

यहां पूरा फ़्लैश वर्ग है, तो आप नियंत्रक वर्ग परिभाषा से पहले नियंत्रक. php के लिए इस जोड़ सकते हैं:

इस वर्ग सीधे आगे है । यह दो गुण और उत्पादन के लिए एक समारोह है फ़्लैश HTML ।

अब हम सभी के लिए पृष्ठों को प्रदर्शित शुरू की जरूरत टुकड़े है, तो चलो app. php फ़ाइल बनाएं । फ़ाइल बनाएँ और निम्न कोड सम्मिलित करें:

और वह यह है! नियंत्रक प्राप्त चर से अनुरोध पढ़ता है, यह रूटर करने के लिए गुजरता है, और उपयुक्त फ़ंक्शन कॉल करता है । चलो दृश्य के कुछ बनाने के अंत में ब्राउज़र में प्रदर्शित कुछ मिलता है ।


विचारों को

अपनी साइट के रूट में एक फ़ोल्डर बनाएं दृश्य कहा जाता है । जैसा कि आप पहले से ही अनुमान लगाया हो सकता है, इस निर्देशिका में सभी वास्तविक विचार शामिल होंगे । यदि आप किसी दृश्य की अवधारणा से अपरिचित हैं, तो आप उन फ़ाइलों के रूप में सोच सकते हैं जो HTML के टुकड़े जेनरेट करते हैं जो पृष्ठ बनाते हैं. मूलतः, हम शीर्ष लेख, पाद लेख और प्रत्येक पृष्ठ के लिए एक के लिए एक दृश्य होगा । इन टुकड़ों को अंतिम परिणाम (जैसे शीर्षक + page_view + पाद लेख = final_page) में गठबंधन ।

के पाद लेख के साथ शुरू करते हैं; यह सिर्फ मानक HTML है । एक फ़ाइल बनाएं दृश्य फ़ोल्डर के अंदर पाद लेख. php बुलाया और निंनलिखित HTML जोड़ें:

मुझे लगता है कि यह दो बातें बहुत अच्छी तरह से दर्शाता है:

  • ये सिर्फ एक वास्तविक पृष्ठ के टुकड़े कर रहे हैं ।
  • gfx फ़ोल्डर में हैं जो छवियों तक पहुँचने के लिए, मैं (mod_rewrite नियम के लिए) पथ के आरंभ करने के लिए संसाधन/

अगले, चलो हैडर. php फ़ाइल बनाएं । शीर्षलेख थोड़ा अधिक जटिल है क्योंकि यह निर्धारित करना होगा कि उपयोगकर्ता साइन इन है या नहीं । यदि उपयोगकर्ता में लॉग इन किया है, यह मेनू पट्टी प्रदर्शित करता है; अंयथा, यह एक लॉगिन फार्म प्रदर्शित करता है । यहां पूरा header. php फ़ाइल है:

मैं HTML के बहुत समझाने नहीं जा रहा हूं । कुल मिलाकर, यह दृश्य सीएसएस शैली पत्रक में लोड और सही उपयोगकर्ता के प्रमाणीकरण की स्थिति पर आधारित शीर्षक बनाता है । यह एक सरल अगर बयान और चर नियंत्रक से पारित के साथ पूरा किया है ।

मुखपृष्ठ के लिए अंतिम दृश्य वास्तविक घर. php देखें है । इस दृश्य में अभिवादन चित्र और साइनअप फ़ॉर्म होता है । यहां घर. php के लिए कोड है:

साथ में, इन तीन विचारों मुखपृष्ठ पूरा करें । अब चलो जाओ होम पेज के लिए समारोह लिखने ।


मुख पृष्ठ

हम indexPage बुलाया नियंत्रक वर्ग में एक समारोह लिखने की जरूरत () मुख पृष्ठ लोड करने के लिए (यह है कि हम क्या रूटर वर्ग में स्थापित) । निम्न पूर्ण फ़ंक्शन checkAuth () फ़ंक्शन के बाद नियंत्रक वर्ग में जाना चाहिए:

पहले दो पंक्तियों की जांच करें यदि उपयोगकर्ता पहले से ही साइन इन है । यदि ऐसा है, तो फ़ंक्शन उपयोगकर्ता को "मित्र" पृष्ठ पर रीडायरेक्ट करता है, जहाँ वे अपने मित्रों के पोस्ट पढ़ सकते हैं और उनके प्रोफ़ाइल को देखते हैं. यदि उपयोगकर्ता साइन इन नहीं है, तो यह घर पृष्ठ लोड करने के लिए जारी है, जांच अगर कोई चमक प्रदर्शित करने के लिए कर रहे हैं । तो उदाहरण के लिए, यदि उपयोगकर्ता ribbit.com/home/0 को जाता है, तो यह इस समारोह में पहली त्रुटि दिखाता है और इतने पर अगले सात चमक के लिए । बाद में, हम loadPage () समारोह कॉल स्क्रीन पर सब कुछ प्रदर्शित करने के लिए ।

इस बिंदु पर यदि आप सब कुछ सेटअप सही ढंग से (यानी अपाचे और हमारे कोड अभी तक) है, तो आप अपनी साइट (उदाहरण के स्थानीय होस्ट) की जड़ में जाने में सक्षम होना चाहिए और घर पृष्ठ देखें ।

बधाइयाँ!! यह बाहर पर यहां से चिकनी नौकायन है अच्छी तरह से कम चिकनी नौकायन । यह सिर्फ अंय नौ कार्यों कि हम रूटर में परिभाषित के लिए पिछले कदम दोहराने की बात है ।


कुल्ला और दोहराने

अगला तार्किक चरण साइनअप फ़ंक्शन बनाने के लिए है, आप indexPage () के बाद यह अधिकार जोड़ सकते हैं:

इस समारोह में यकीन है कि सब कुछ जांच कर रही द्वारा एक मानक साइनअप प्रक्रिया के माध्यम से चला जाता है । उपयोगकर्ता की जानकारी से कोई भी पास नहीं है, तो फ़ंक्शन प्रदर्शित करने के लिए उपयोगकर्ता वापस मुख पृष्ठ के लिए उपयुक्त त्रुटि कोड के साथ indexPage () फ़ंक्शन के लिए पुनर्निर्देशित करता है ।

मौजूदा उपयोगकर्ता नाम और पासवर्ड के लिए चेक यहां नहीं किया जा सकता है ।

उन जांच के लिए मॉडल वर्ग में होने की जरूरत है क्योंकि हम डेटाबेस के लिए एक कनेक्शन की जरूरत है । चलो मॉडल वर्ग के लिए वापस जाओ और signupUser () समारोह को लागू करने । आप userForAuth () समारोह के बाद यह सही रखना चाहिए:

हम हमारे मौजूद () समारोह का उपयोग करने के लिए प्रदान की ईमेल या उपयोगकर्ता नाम की जांच, एक त्रुटि कोड या तो पहले से ही मौजूद है । अगर सब कुछ गुजरता है, तो हम अंतिम कुछ क्षेत्रों, created_at और gravatar_hash जोड़ने के लिए, और उंहें डेटाबेस में डालें ।

सच लौटने से पहले, हम उपयोगकर्ता प्राधिकृत । यह फ़ंक्शन प्रमाणन कुकी जोड़ता है और UserAuth डेटाबेस में क्रेडेंशियल्स संमिलित करता है । चलो authorizeUser () अब समारोह में जोड़ें:

इस समारोह में साइन अप करें और लॉगिन पर एक उपयोगकर्ता के लिए अद्वितीय हैश बनाता है । यह हैश पैदा करने का एक बहुत ही सुरक्षित तरीका नहीं है, लेकिन मैं बारह यादृच्छिक अल्फ़ांयूमेरिक अक्षरों के साथ साथ उपयोगकर्ता नाम के sha1 हैश गठबंधन चीजों को सरल रखना ।

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

वहाँ अद्वितीय चरित्र संयोजन के एक परिमित सेट है, और आप अंततः एक ही हैश के साथ दो उपयोगकर्ताओं होगा । लेकिन अगर आप हैश करने के लिए उपयोगकर्ता की आईडी जोड़ने के लिए, तो आप हर उपयोगकर्ता के लिए एक अद्वितीय हैश गारंटी रहे हैं ।


लॉगिन और लॉगआउट

घर पृष्ठ के लिए कार्यों को समाप्त करने के लिए, लॉगिन () और लॉगआउट () कार्यों को लागू करते हैं । लॉगिन () फ़ंक्शन के बाद नियंत्रक वर्ग के लिए निम्न जोड़ें:

यह बस लॉगिन फार्म और लॉगिन करने के प्रयास से पोस्ट क्षेत्रों लेता है । एक सफल लॉगिन पर, यह "दोस्त" पृष्ठ पर उपयोगकर्ता लेता है । अंयथा, यह उचित त्रुटि प्रदर्शित करने के लिए होमपेज वापस पुनर्निर्देशित करता है । अगले, मैं तुंहें दिखाता हूं लॉगआउट () समारोह:

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

चलो पर मॉडल वर्ग के लिए कूद और इन अद्यतनों के लिए आवश्यक कार्यों को जोड़ने । पहला है attemptLogin () जो लॉगिन करने की कोशिश करता है और true या false देता है । तो फिर हम logoutUser है ():


मित्रों पृष्ठ

मेरे साथ रुको; हम अंत के करीब हो रही है! चलो "दोस्त" पृष्ठ का निर्माण । इस पेज में आपकी प्रोफ़ाइल जानकारी और आपकी और आपके द्वारा फ़ॉलो की जाने वाली पोस्ट की सूची होती है । वास्तविक दृष्टिकोण के साथ चलो शुरू, तो एक फ़ाइल बनाने के विचार फ़ोल्डर में दोस्त. php बुलाया और निंनलिखित डालें:

पहले div नई "ribbits" बनाने के लिए फार्म का है । अगले div उपयोगकर्ता प्रोफ़ाइल जानकारी प्रदर्शित करता है, और पिछले अनुभाग के लिए पाश है कि प्रत्येक "ribbit" प्रदर्शित करता है । फिर, मैं समय की खातिर के लिए बहुत विस्तार में जाने के लिए नहीं जा रहा हूं, लेकिन यहां सब कुछ बहुत सीधे आगे है ।

अब, नियंत्रक वर्ग में, हम दोस्त () समारोह में जोड़ने के लिए है:

इस समारोह indexPage () समारोह के रूप में एक ही संरचना के बाद: हम पहले जांच अगर उपयोगकर्ता में लॉग इन किया है और उंहें घर पृष्ठ पर अनुप्रेषित अगर नहीं है ।

हम तो मॉडल वर्ग से दो कार्यों कॉल: एक उपयोगकर्ता के प्रोफ़ाइल जानकारी प्राप्त करने के लिए और एक उपयोगकर्ता के अनुयायियों से पदों प्राप्त करने के लिए ।

हम तीन संभव चमक यहां है: साइनअप के लिए एक, लॉगिन के लिए एक और एक के लिए यदि उपयोगकर्ता एक नया ribbit पर १४० वर्ण सीमा से अधिक है । अंत में, हम loadPage () समारोह में सब कुछ प्रदर्शित करने के लिए कहते हैं ।

अब मॉडल वर्ग में हम दो कार्यों हम ऊपर बुलाया दर्ज है । पहले हम ' getUserInfo ' समारोह है:

समारोह में ही सरल है । हम किसी SQL क्वेरी निष्पादित और परिणाम वापस । दूसरी ओर, क्वेरी, थोड़ा जटिल लग सकता है । यह प्रोफ़ाइल अनुभाग के लिए आवश्यक जानकारी को एकल पंक्ति में संयोजित करता है. इस क्वेरी द्वारा दी गई जानकारी में आपके द्वारा किए गए ribbits की मात्रा, आपके नवीनतम ribbit, आपके कितने फ़ॉलोअर हैं और आप कितने लोगों का अनुसरण कर रहे हैं, शामिल हैं. इस क्वेरी मूल रूप से इन गुणों में से प्रत्येक के लिए एक सामांय चयन क्वेरी को जोड़ती है और फिर सब कुछ एक साथ मिलती है ।

अगले हम getFollowersRibbits () समारोह जो इस तरह दिखता था:

पिछले समारोह के लिए इसी तरह, केवल जटिल हिस्सा यहां क्वेरी है । हम निंनलिखित जानकारी के लिए प्रत्येक पोस्ट के लिए प्रदर्शन की जरूरत है: नाम, यूज़रनेम, gravatar छवि, वास्तविक ribbit, और तारीख जब ribbit बनाया गया था । यह क्वेरी आपकी पोस्ट और उन लोगों की पोस्ट के माध्यम से सॉर्ट होती है जिनका आप अनुसरण करते हैं, और मित्रों के पृष्ठ पर प्रदर्शित करने के लिए नवीनतम दस ribbits लौटाता है.

अब आप साइन इन करने में सक्षम होना चाहिए, लॉगिन और देखने के दोस्त पृष्ठ । हम अभी भी ribbits बनाने के लिए तो चलो कि अगले पर मिल नहीं कर रहे हैं ।


अपनी पहली Ribbit पोस्टिंग

यह कदम बहुत आसान है । हमारे पास कार्य करने के लिए कोई दृश्य नहीं है; हम बस नियंत्रक और मॉडल कक्षाओं में एक समारोह की जरूरत है । नियंत्रक में, निम्न फ़ंक्शन जोड़ें:

फिर हम जांच अगर प्रयोक्ता में लॉग इन किया है द्वारा शुरू, और यदि हां, तो हम यह सुनिश्चित करने के बाद १४० वर्ण सीमा पर नहीं है । हम तो मॉडल से postRibbit () कॉल करेंगे और वापस दोस्त पृष्ठ पर अनुप्रेषित ।

अब मॉडल वर्ग में, postRibbit () समारोह में जोड़ें:

हम इस एक के साथ मानक प्रश्नों के लिए वापस आ रहे हैं; बस एक सरणी में डेटा गठबंधन और यह हमारे डालने के समारोह के साथ डालें । अब आप रिबिट्स पोस्ट करने में सक्षम होना चाहिए, इसलिए कुछ पोस्ट करने का प्रयास करें। हमारे पास अभी भी थोड़ा और काम है, इसलिए कुछ रिबिट पोस्ट करने के बाद वापस आएं।


अंतिम दो पेजेस

अगले दो पृष्ठों में नियंत्रक में लगभग समान कार्य हैं इसलिए मैं उन्हें एक साथ पोस्ट करने जा रहा हूं:

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

Ribbits के लिए बस public.php नामक एक फ़ाइल बनाएं और निम्न को अंदर रखें:

पहला div ribbit खोज फ़ॉर्म है, और दूसरा div सार्वजनिक ribbits प्रदर्शित करता है।

और यहां अंतिम दृश्य है जो profiles.php दृश्य है:

यह public.php दृश्य के समान ही है।

इन दो पृष्ठों को काम करने के लिए आवश्यक अंतिम चरण मॉडल निर्भरता में अपने निर्भरता कार्यों को जोड़ना है। चलो सार्वजनिक रिबिट प्राप्त करने के लिए समारोह के साथ शुरू करते हैं। मॉडल वर्ग में निम्नलिखित जोड़ें:

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

इसमें बहुत कुछ लेना है, इसलिए मैं धीरे-धीरे इसके ऊपर जाऊंगा। पहला अगर ... अन्य कथन जांचता है कि उपयोगकर्ता ने एक खोज क्वेरी उत्तीर्ण की है या नहीं, और दस उपयोगकर्ताओं को पुनर्प्राप्त करने के लिए उपयुक्त एसक्यूएल उत्पन्न करता है। फिर हम सुनिश्चित करते हैं कि क्वेरी ने कुछ उपयोगकर्ताओं को वापस कर दिया, और यदि ऐसा है, तो यह प्रत्येक उपयोगकर्ता के लिए दूसरी क्वेरी उत्पन्न करने के लिए आगे बढ़ता है, नवीनतम रिबिट और जानकारी पुनर्प्राप्त करता है।

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

फिर, हम परिणाम लेते हैं और उन्हें पहली क्वेरी से उपयोगकर्ता की जानकारी के साथ जोड़ते हैं। यह सभी डेटा प्रोफ़ाइल दृश्य में प्रदर्शित करने के लिए वापस कर दिया गया है।

यदि आपने सब कुछ सही तरीके से किया है, तो आप सभी पृष्ठों के माध्यम से और रिबिट पोस्ट करने में सक्षम होना चाहिए। एकमात्र चीज जो हमने करने के लिए छोड़ी है वह है कि अन्य लोगों का अनुसरण करने और अनुसरण करने के लिए कार्य जोड़ें।


लूज एंड्स को मारना

इन कार्यों से जुड़े कोई दृश्य नहीं है, इसलिए ये जल्दी होंगे। चलो नियंत्रक वर्ग में कार्यों के साथ शुरू करते हैं:

ये कार्य, जैसा कि आप शायद देख सकते हैं, लगभग समान हैं। केवल अंतर यह है कि एक फॉलोोज़ टेबल में एक रिकॉर्ड जोड़ता है और एक रिकॉर्ड हटा देता है। अब मॉडल मॉडल में कार्यों के साथ इसे खत्म करें:

ये कार्य मूल रूप से वही हैं; वे केवल उन तरीकों से भिन्न होते हैं जिन्हें वे कहते हैं।

साइट अब पूरी तरह से परिचालित है !!! आखिरी चीज जिसे मैं जोड़ना चाहता हूं वह दृश्य फ़ोल्डर के अंदर एक और। Htaccess फ़ाइल है। यहां इसकी सामग्री दी गई है:

यह सख्ती से जरूरी नहीं है, लेकिन निजी फाइलों तक पहुंच प्रतिबंधित करना अच्छा है।


निष्कर्ष

हमने निश्चित रूप से खरोंच से एक ट्विटर क्लोन बनाया!

यह एक बहुत लंबा लेख रहा है, लेकिन हमने बहुत कुछ शामिल किया है! हमने एक डेटाबेस स्थापित किया और अपना खुद का एमवीसी ढांचा बनाया। हमने निश्चित रूप से खरोंच से एक ट्विटर क्लोन बनाया!

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

मुझे उम्मीद है कि आपने इस लेख का आनंद लिया है, अगर आपके पास कोई विचार या प्रश्न हैं तो मुझे एक टिप्पणी छोड़ने के लिए स्वतंत्र महसूस करें। पढ़ने के लिए धन्यवाद!

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.