Admin-Editable Settings Without Complex Code

ऐप्स को एक निरंतर समस्या का सामना करना पड़ता है। कुछ सेटिंग्स .env फ़ाइल में होनी चाहिए। अन्य सेटिंग्स को बिना नया कोड डिप्लॉय किए एडमिन पैनल के माध्यम से बदलना चाहिए। उदाहरणों में साइट के नाम, टाइमज़ोन, या रजिस्ट्रेशन सेटिंग्स शामिल हैं।

कई डेवलपर्स इन्हें डेटाबेस में स्टोर करते हैं लेकिन इससे अव्यवस्था पैदा हो जाती है। अंत में डेटा पढ़ने के दो तरीके बन जाते हैं। आपके ऐप का एक हिस्सा config() का उपयोग करता है जबकि दूसरा डेटाबेस मॉडल का उपयोग करता है। इससे ऐसे बग्स पैदा होते हैं जहाँ सेटिंग्स असंगत हो जाती हैं।

आप एक सिंगल रीड पाथ (single read path) का उपयोग करके इससे बच सकते हैं। डेटाबेस को एक ऐसे लेयर के रूप में मानें जो बूट (boot) के समय आपके कॉन्फ़िग (config) के ऊपर काम करे।

इसे बनाने का तरीका यहाँ दिया गया है:

• सिंगल सोर्स ऑफ ट्रुथ (single source of truth) का उपयोग करें। डेटाबेस वैल्यू को होल्ड करता है, लेकिन एप्लिकेशन केवल config() के माध्यम से ही उसे पढ़ता है। • टाइप्ड क्लासेस (typed classes) का उपयोग करें। लूज़ एरेज़ (loose arrays) के बजाय, स्ट्रिक्ट टाइप्स वाली क्लासेस का उपयोग करें। यह टाइपो और साइलेंट एरर्स को रोकता है। • बूट प्रक्रिया के दौरान सेटिंग्स लोड करें। डेटाबेस वैल्यूज़ को निकालने और उन्हें कॉन्फ़िग एरे (config array) में डालने के लिए सर्विस प्रोवाइडर का उपयोग करें।

इन दो तकनीकी जाल (traps) से सावधान रहें:

  1. द टाइमज़ोन ट्रैप (The Timezone Trap) Laravel बूट प्रक्रिया के शुरुआती चरण में टाइमज़ोन सेट करता है। यदि आप बाद में कॉन्फ़िग वैल्यू बदलते हैं, तो PHP अभी भी पुराने टाइमज़ोन का ही उपयोग करेगा। अपने नए कॉन्फ़िग वैल्यू के साथ ग्लोबल PHP सेटिंग को सिंक करने के लिए आपको मैन्युअल रूप से date_default_timezone_set() कॉल करना होगा।

  2. द फ्रेश इंस्टॉल ट्रैप (The Fresh Install Trap) एक नए ऐप में कोई डेटाबेस टेबल नहीं होती है। यदि सेटिंग्स टेबल न होने के कारण आपकी बूट प्रक्रिया विफल हो जाती है, तो ऐप शुरू नहीं होगा। यदि ऐप बूट होने में विफल रहता है, तो आप माइग्रेशन (migrations) नहीं चला सकते। अपने सेटिंग्स लॉजिक को try/catch ब्लॉक में लपेटें। यह ऐप को तब तक .env डिफॉल्ट्स पर वापस जाने (fall back) की अनुमति देता है जब तक कि आप अपने माइग्रेशन न चला लें।

सुरक्षा के लिए एक और टिप: रजिस्ट्रेशन जैसी सुविधा को अक्षम (disable) करते समय, केवल UI में बटन को न छिपाएं। सुविधा को कॉन्फ़िग से पूरी तरह से हटा दें। यदि आप कॉन्फ़िग से सुविधा हटा देते हैं, तो रूट्स (routes) भी गायब हो जाते हैं। एक लाइव एंडपॉइंट वाला छिपा हुआ फॉर्म सुरक्षा जोखिम है। एक गायब रूट 404 रिटर्न करता है।

अपने कोड को सरल रखें। आपके कंट्रोलर्स और व्यूज़ को यह पता नहीं होना चाहिए कि कोई सेटिंग फ़ाइल से आई है या डेटाबेस से। उन्हें केवल config() दिखना चाहिए।

स्रोत: https://dev.to/nasrulhazim/admin-editable-settings-without-giving-up-config-2cj0