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

Laravel के लिए अपना पहला एडमिन बंडल बनाएँ

by
Difficulty:IntermediateLength:LongLanguages:

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

इस तथ्य से इनकार करना मुश्किल है कि PHP कम्युनिटी Laravel 4 के लिए उत्साहित है। अन्य चीजों के अलावा, फ्रेमवर्क कंपोजर की शक्ति का लाभ उठाता है, जिसका अर्थ यह है कि यह किसी भी पैकेज या स्क्रिप्ट को Packagist से उपयोग करने में सक्षम है।

इस बीच, Laravel "Bundles" प्रदान करता है, जो हमें भविष्य के प्रोजेक्ट्स में उपयोग के लिए कोड को मॉड्यूलर करने की अनुमति देता है। Bundle directory उत्कृष्ट स्क्रिप्ट और पैकेज से भरा है जिसे आप अपने ऍप्लिकेशन्स में उपयोग कर सकते हैं। इस लेसन में, मैं आपको दिखाऊंगा कि स्क्रैच से इसे कैसे बनाना है!


रुको, बंडल क्या है?

बंडल ग्रुप से संबंधित कोड का एक आसान तरीका प्रदान करते हैं। यदि आप CodeIgniter से परिचित हैं, तो बंडल "Sparks" के समान हैं। जब आप फ़ोल्डर स्ट्रक्चर को देखते हैं तो यह स्पष्ट होता है।

Folder Structure

एक बंडल बनाना काफी सरल है। प्रोसेस को इलूस्ट्रेट करने के लिए, हम एक एडमिन पैनल बॉयलरप्लेट तैयार करेंगे जिसे हम भविष्य के प्रोजेक्ट्स के भीतर उपयोग कर सकते हैं। सबसे पहले, हमें अपने 'Bundle' फ़ोल्डर में 'Admin' डायरेक्टरी बनाने की आवश्यकता है। उपरोक्त इमेज से फ़ोल्डर स्ट्रक्चर को दोहराने का प्रयास करें।

इससे पहले कि हम अपने बंडल में कुछ भी जोड़ना शुरू करें, हमें इसे पहले Laravel के साथ रजिस्टर करने की आवश्यकता है। यह आपके एप्लिकेशन की bundles.php फ़ाइल में किया जाता है। एक बार जब आप इस फ़ाइल को खोल लेंगे, तो आपको एक array रीटर्न किया जाना चाहिए; हमें बस हमारे बंडल को जोड़ने और एक handle को परिभाषित करने की आवश्यकता है। यह URI बन जाएगा जिसमें हम अपने एडमिन पैनल तक पहुंच सकते हैं।

यहां, मैंने अपने वाले का नाम "Admin" दिया है, लेकिन जो कुछ भी आप चाहते हैं उसे कॉल करने के लिए स्वतंत्र महसूस करें।

एक बार हमें यह सेटअप मिल गया है, तो हमें start.php फ़ाइल बनाने की आवश्यकता है। यहां, हम कुछ चीजों को सेटअप करने जा रहे हैं, जैसे कि हमारे namespaces। यदि आप इससे परेशान नहीं हैं, तो आपकी उम्मीद के अनुसार आपके Bundle को काम करने के लिए वास्तव में एक स्टार्ट फ़ाइल की आवश्यकता नहीं है।

Laravel की ऑटोलोडर क्लास हमें कुछ चीजें करने की अनुमति देती है: हमारे बेस कंट्रोलर को मैप करें, और namespaces को ऑटोलोड करें।

Namespacing यह सुनिश्चित करेगा कि हम पहले से ही हमारे एप्लीकेशन में शामिल किसी भी अन्य मॉडल या लाइब्रेरीज के साथ संघर्ष नहीं करेंगे। आप देखेंगे कि हमने चीजों को थोड़ा आसान बनाने के लिए हमारे कंट्रोलर्स को namespace नहीं चुना है।


पब्लिशिंग एसेट्स

एडमिन पैनल के लिए, हम Twitter के Bootstrap का लाभ उठाएंगे, इसलिए एक कॉपी लें। बाद में हमारे एप्लीकेशन पर पब्लिश करने के लिए हम इसे अपने बंडल के अंदर एक public फ़ोल्डर में पॉप कर सकते हैं।

जब आप उन्हें पब्लिश करने के लिए तैयार हों, तो आर्टिसन के माध्यम से केवल निम्न कमांड चलाएं।

यह Laravel इंस्टालेशन की रुट के भीतर फ़ोल्डर स्ट्रक्चर और फ़ाइलों को हमारे public फ़ोल्डर में bundle डायरेक्टरी में कॉपी करेगा। इसके बाद हम इसे अपने बंडल के बेस कंट्रोलर में उपयोग कर सकते हैं।


Base कंट्रोलर को सेटअप करना

base कंट्रोलर सेटअप करना और वहां से एक्सटेंड करना हमेशा एक स्मार्ट विचार है। यहां, हम आराम से कंट्रोलर सेट कर सकते हैं, लेआउट को परिभाषित कर सकते हैं, और किसी भी एसेट्स को शामिल कर सकते हैं। हमें बस इस फ़ाइल को कॉल करने की जरूरत है, base.php, और इसे हमारे कंट्रोलर की डायरेक्टरी में पॉप करें।

सबसे पहले, चलो आउट ऑफ़ द वे कुछ हाउसकीपिंग करते है। हम निश्चित रूप से Laravel के restful कंट्रोलर्स का उपयोग करना चाहते हैं।

और हम एक लेआउट निर्दिष्ट करेंगे जिसे हम जल्द ही तैयार करेंगे। यदि आप कंट्रोलर लेआउट की आदत नहीं है, तो आप एक इलाज के लिए यहाँ हैं।

बंडल नाम, दो colons के बाद, Laravel में एक paradigm है, हम भविष्य में और अधिक देखेंगे, इसलिए नजर रखें।

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

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

अब, जिस तरह से, हम आसानी से हमारे bootstrap स्टाइल्स और स्क्रिप्ट शामिल कर सकते हैं। हमारा पूरा बेस कंट्रोलर इसी तरह दिखना चाहिए:

हमने 404 रिस्पांस रीटर्न करने के लिए एप्लीकेशन के बेस कंट्रोलर से पकड़ने के सभी रिक्वेस्ट को भी पार किया है, पेज नहीं मिला जाना चाहिए।

कुछ और करने से पहले, चलिए उस लेआउट, views/layout/main.blade.php के लिए फ़ाइल बनाते हैं, इसलिए हमें बाद में किसी भी error का सामना नहीं करना पड़ता है।


बंडल को सुरक्षित करना

चूंकि हम एक एडमिन पैनल बना रहे हैं, हम लोगों को बाहर रखना चाहते हैं। शुक्र है, हम आसानी से इसे पूरा करने के लिए Laravel के Auth क्लास में निर्मित कर सकते हैं..

सबसे पहले, हमें अपनी टेबल बनाने की जरूरत है; मैं अपने टेबल नाम के रूप में 'admins' का उपयोग करने जा रहा हूं, लेकिन यदि आप चाहें तो इसे बदल सकते हैं। Artisan एक माइग्रेशन जेनेरेट करेगा, और इसे हमारे बंडल की माइग्रेशन डायरेक्टरी में पॉप करेगा। बस कमांड लाइन में निम्न चलाएं।

स्कीमा का निर्माण

यदि आप स्कीमा बिल्डर से अपरिचित हैं, तो मैं रेकमेंड करता हूं कि आप डॉक्यूमेंटेशन में एक नज़र डालें। हम कुछ कॉलम शामिल करने जा रहे हैं:

  • id - यह ऑटो-इन्क्रीमेंट होगी और हमारी प्राइमरी की बन जाएगी
  • name
  • username
  • password
  • email
  • role - हम आज इसका लाभ नहीं उठाएंगे, लेकिन यह आपको बाद में बंडल को एक्सटेंड करने की अनुमति देगा

बेस्ट प्रैक्टिसेज का पालन करने के लिए, हम डिफ़ॉल्ट टाइमस्टैम्प भी शामिल करेंगे।

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

ऊपर, हमने यह सुनिश्चित किया है कि हम namespace का उपयोग कर रहे हैं जिसे हमने start.php में परिभाषित किया है। इसके अलावा, इसलिए हम सही ढंग से Eloquent को संदर्भित कर सकते हैं, हम उपनाम बनाते हैं।

Auth को एक्सटेंड करना

हमारे बंडल को पूरी तरह सेल्फ कॉन्टैन रखने के लिए, हमें auth को एक्सटेंड करने की आवश्यकता होगी। यह हमें केवल हमारे एडमिन पैनल में लॉगिन करने के लिए टेबल को परिभाषित करने की अनुमति देगा, और मुख्य एप्लिकेशन में हस्तक्षेप नहीं करेगा।

हमारे कस्टम ड्राइवर बनाने से पहले, हम एक कॉन्फ़िगरेशन फ़ाइल बनाएंगे, जहां आप चुन सकते हैं कि आप डेटाबेस टेबल से username या email कॉलम का उपयोग करना चाहते हैं।

यदि आप उन कॉलम को बदलना चाहते हैं जिन्हें हम उपयोग करेंगे, तो बस यहां वैल्यू को एडजस्ट करें।

हमें इसके बाद ड्राइवर बनाने की जरूरत है। आइए इसे "AdminAuth" कहते हैं, और इसे हमारे libraries फ़ोल्डर में शामिल करें। चूंकि हम Auth को एक्सटेंड कर रहे हैं, इसलिए हम सभी को काम करने के लिए केवल कुछ मेथड्स को ओवरराइट करने की आवश्यकता है, जैसा कि हमारा इरादा है।

अब जब हमने ड्राइवर बना लिया है, हमें Laravel को बताने की जरूरत है। हम अपनी start.php फ़ाइल में ऐसा करने के लिए Auth के extend मेथड का उपयोग कर सकते हैं।

एक अंतिम चीज जिसे हमें करने की ज़रूरत है वह रनटाइम पर इसका उपयोग करने के लिए Auth को कॉन्फ़िगर करता है। हम इसे निम्नलिखित के साथ हमारे बेस कंट्रोलर के कन्स्ट्रक्टर में कर सकते हैं।


रुट्स और कंट्रोलर

इससे पहले कि हम किसी भी चीज़ पर जा सकें, हमें कंट्रोलर बनाना होगा। चलिए अपने डैशबोर्ड कंट्रोलर को बनाते हैं, जिसे लॉग इन करने के बाद हम देखेंगे।

जैसा कि हम चाहते हैं कि यह हमारे बंडल के रुट पर दिखाना चाहे (यानी हम जिस हैंडल को पहले परिभाषित किया था), हमें यह home.php कॉल करने की आवश्यकता होगी। Laravel आपके एप्लिकेशन या बंडल के रुट पर जो दिखाना चाहते हैं उसे एस्टेब्लिश करने के लिए 'home' कीवर्ड का उपयोग करता है।

अपना बेस कंट्रोलर को एक्सटेंड करें, और इंडेक्स व्यू बनाएं। अभी के लिए, बस 'Hello World' रीटर्न करें ताकि हम सुनिश्चित कर सकें कि सब ठीक काम कर रहा है।

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

यहां, मैंने home कंट्रोलर को रजिस्टर किया है, जिसे Laravel स्वचालित रूप से / में असाइन करेगा। बाद में, हम array में हमारे लॉगिन कंट्रोलर को जोड़ देंगे।

यदि आप अपने ब्राउज़र में /admin (या जो भी आपने पहले परिभाषित किया है) पर जाएं, तो आपको 'Hello World' दिखना चाहिए।


लॉगिन फॉर्म का निर्माण करना

आइए लॉग इन कंट्रोलर बनाएं, हालांकि, बेस कंट्रोलर को एक्सटेंड करने के बजाए, हम Laravel के मुख्य कंट्रोलर को एक्सटेंड करेंगे। इस निर्णय के पीछे कारण जल्द ही स्पष्ट हो जाएगा।

चूंकि हम एक्सटेंड नहीं कर रहे हैं, हमें शुरुआत से पहले कुछ चीजों को सेट करने की आवश्यकता है - अर्थात् आराम से लेआउट, सही ऑथ ड्राइवर, और हमारे एसेट्स।

चलिए अपना व्यू भी बनाते हैं। हम थोड़ा सा चीजों को गति देने के लिए Blade - Laravel के टेम्पलेटिंग इंजन का उपयोग करने जा रहे हैं। अपने बंडल की views डायरेक्टरी में, इसके भीतर 'login' डायरेक्टरी और 'index.blade.php' फ़ाइल बनाएं।

हम एक स्टैण्डर्ड HTML पेज स्ट्रक्चर में पॉप करेंगे और एसेट्स को echo करेंगे।

अब, आइए सुनिश्चित करें कि व्यू कंट्रोलर में बनाया जा रहा है। चूंकि हम restful कंट्रोलर्स का उपयोग कर रहे हैं, हम अपने मेथड में 'get' एक्शन का लाभ उठा सकते हैं।

बहुत बढ़िया! अब हम अपने फॉर्म का निर्माण शुरू करने के लिए तैयार हैं, जिसे हम Form क्लास के साथ बना सकते हैं।

Login Form

ऊपर, हमने एक ऐसा फॉर्म बनाया है जो इसके साथ जाने के लिए विभिन्न फॉर्म एलिमेंट्स और लेबल के साथ स्वयं (ठीक वही जहाँ हम चाहते हैं) पोस्ट करेगा। अगला स्टेप फॉर्म को प्रोसेस करना है।

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

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

हमें यूज़र्स को लॉग आउट करने की भी आवश्यकता होगी; तो चलो get_logout मेथड बनाएं, और निम्न जोड़ें। यह यूज़र्स को लॉग आउट करेगा, और फिर /admin/login/logout पर जाकर उन्हें रीडायरेक्ट करेगा।

आखिरी चीज जो हमें करना चाहिए वह हमारी रूट फाइल में लॉगिन कंट्रोलर जोड़ना है।

रुट्स को फ़िल्टर करना

लोगों को हमारी लॉगिन स्क्रीन को बाईपास करने से रोकने के लिए हमारे रुट्स को यह पता लगाने के लिए फ़िल्टर करना होगा कि वे अधिकृत यूजर हैं या नहीं। रूट प्रदर्शित होने से पहले फ़िल्टर करने के लिए हम अपने routes.php में फ़िल्टर बना सकते हैं, और इसे हमारे बेस कंट्रोलर से जोड़ सकते हैं।

इस बिंदु पर, जो कुछ भी करने के लिए छोड़ दिया गया है वह इसे हमारे बेस कंट्रोलर के कन्स्ट्रक्टर में कॉल करता है। अगर हमने अपने लॉगिन कंट्रोलर को हमारे आधार से बढ़ाया है, तो हमारे पास एक अनंत लूप होगा जो अंततः टाइम आउट हो जाएगा।


व्यू को सेट अप करना

इससे पहले, हमने अपना main.blade.php लेआउट बनाया; अब, हम इसके साथ कुछ करने जा रहे हैं। आइए एक HTML पेज और हमारे एसेट्स को प्राप्त करें जो लाये जा रहे हैं।

आप देखेंगे कि मैंने कुछ वेरिएबल्स को भी echo किया है: $title और $content। हम इन कंट्रोलर्स से डेटा पास करने के लिए मैजिक कंट्रोलर्स का उपयोग करने में सक्षम होंगे। मैंने कंटेनर div के अंदर $content भी पॉप अप किया है जो बूटस्ट्रैप स्टाइल प्रदान करेगा।

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

इसे अपने बंडल के अंदर views/dashboard डायरेक्टरी के भीतर index.blade.php के रूप में सेव करें।

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

title एक मैजिक मेथड है जिसे हम अपने लेआउट में एक वेरिएबल के रूप में echo कर सकते हैं। nest का उपयोग करके, हम सीधे हमारे कंट्रोलर से लेआउट के अंदर एक व्यू शामिल करने में सक्षम हैं।


एक Task बनाना

चीजों को गति देने के लिए, Laravel हमें कमांड लाइन से कोड एक्सेक्यूट करने का एक आसान तरीका प्रदान करता है। इन्हें "Tasks" कहा जाता है; आसानी से डेटाबेस में नया यूजर जोड़ने के लिए यह बनाना एक अच्छा विचार है।

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

Laravel आर्ग्यूमेंट्स के एक array से गुजरेगा; हम यह सुनिश्चित करने के लिए इनकी गणना कर सकते हैं कि हम वही प्राप्त कर रहे हैं जो हम चाहते हैं। यदि नहीं, तो हम एक एरर echo करेंगे। आप यह भी देखेंगे कि हम bundle:publish चलाने के लिए Command क्लास का उपयोग कर रहे हैं। यह आपको अपने एप्लीकेशन या बंडल के अंदर Laravel में निर्मित किसी कमांड लाइन टास्क को चलाने की अनुमति देगा।

इस कार्य की मुख्य बात यह है कि यह इसमें से पारित किये जाने वाले आर्ग्यूमेंट्स को ग्रैब करता है, पासवर्ड को hash करता है, और Admin टेबल में एक नया एडमिन डालता है। इसे चलाने के लिए, हमें कमांड लाइन में निम्न का उपयोग करने की आवश्यकता है।


अब क्या?

इस ट्यूटोरियल में, हमने एक बॉयलरप्लेट एडमिन पैनल बनाया जो एक्सटेंड करने में काफी आसान है। उदाहरण के लिए, हमने जो roles कॉलम बनाया है, वह सीमित कर सकता है कि आपके क्लाइंट क्या देख पा रहे हैं।

बंडल एक एडमिन पैनल से कुछ भी हो सकता है, जैसा कि हमने आज बनाया है, parsers को मार्क डाउन करें - या यहां तक कि पूरा Zend Framework (मैं मजाक नहीं कर रहा हूं)। यहां जो कुछ भी हमने कवर किया है वह आपको बेहतरीन Laravel बंडलों को लिखने के लिए तैयार करेगा, जिसे Laravel की bundle डायरेक्टरी में प्रकाशित किया जा सकता है।

Nettuts+ पर Laravel बंडल बनाने के बारे में और जानें।

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.