गुंतागुंतीच्या कोडशिवाय ॲडमिन-एडिटेबल सेटिंग्ज

ॲप्ससमोर एक सततची समस्या असते. काही सेटिंग्ज .env फाईलमध्ये असाव्यात लागतात. तर काही सेटिंग्ज नवीन कोड डिप्लॉय (deploy) न करता ॲडमिन पॅनेलद्वारे बदलता येण्याजोग्या असाव्यात लागतात. उदाहरणांमध्ये साइटची नावे, टाइमझोन (timezones) किंवा रजिस्ट्रेशन सेटिंग्जचा समावेश होतो.

अनेक डेव्हलपर्स या गोष्टी डेटाबेसमध्ये साठवतात पण त्यामुळे गोंधळ निर्माण होतो. डेटा वाचण्याचे तुमच्याकडे दोन मार्ग तयार होतात. तुमच्या ॲपचा एक भाग config() वापरतो तर दुसरा भाग डेटाबेस मॉडेल वापरतो. यामुळे सेटिंग्जमध्ये विसंगती निर्माण होऊन बग्स (bugs) येऊ शकतात.

तुम्ही एकच 'रीड पाथ' (read path) वापरून हे टाळू शकता. डेटाबेसकडे एक अशा लेयरप्रमाणे पहा जो बूट (boot) प्रक्रियेदरम्यान तुमच्या कॉन्फिगवर (config) ओव्हरले होतो.

हे कसे तयार करायचे ते खालीलप्रमाणे आहे:

• 'सिंगल सोर्स ऑफ ट्रुथ' (single source of truth) वापरा. व्हॅल्यू डेटाबेसमध्ये असेल, पण ॲप्लिकेशन ती फक्त config() द्वारेच वाचेल. • टायप्ड क्लासेस (typed classes) वापरा. लूज ॲरेऐवजी (loose arrays), स्ट्रिक्ट टाइप्स असलेले क्लासेस वापरा. यामुळे टायपो (typos) आणि सायलेंट एरर्स टाळता येतात. • बूट प्रक्रियेदरम्यान सेटिंग्ज लोड करा. डेटाबेस व्हॅल्यूज खेचण्यासाठी आणि त्या कॉन्फिग ॲरेमध्ये (config array) टाकण्यासाठी सर्व्हिस प्रोव्हायडरचा (service provider) वापर करा.

या दोन तांत्रिक जाचांपासून (technical traps) सावध राहा:

  1. टाइमझोनचा सापळा (The Timezone Trap) Laravel बूट प्रक्रियेच्या सुरुवातीलाच टाइमझोन सेट करते. जर तुम्ही नंतर कॉन्फिग व्हॅल्यू बदलली, तरी PHP जुनाच टाइमझोन वापरते. तुमच्या नवीन कॉन्फिग व्हॅल्यूसोबत ग्लोबल PHP सेटिंग सिंक करण्यासाठी तुम्हाला मॅन्युअली date_default_timezone_set() कॉल करावे लागेल.

  2. फ्रेश इन्स्टॉलचा सापळा (The Fresh Install Trap) नवीन ॲपमध्ये कोणतेही डेटाबेस टेबल्स नसतात. जर सेटिंग्ज टेबल नसल्यामुळे तुमची बूट प्रक्रिया अयशस्वी झाली, तर ॲप सुरू होणार नाही. जर ॲप बूट होण्यात अपयशी ठरले, तर तुम्ही मायग्रेशन्स (migrations) रन करू शकत नाही. तुमच्या सेटिंग्ज लॉजिकला try/catch ब्लॉक मध्ये गुंडाळा (wrap). यामुळे जोपर्यंत तुम्ही मायग्रेशन्स रन करत नाही, तोपर्यंत ॲप .env च्या डिफॉल्ट व्हॅल्यूजवर अवलंबून राहू शकते.

सुरक्षेसाठी आणखी एक टीप: रजिस्ट्रेशनसारखे फीचर डिसेबल करताना, फक्त UI मध्ये बटण लपवू नका. ते फीचर कॉन्फिगमधून पूर्णपणे काढून टाका. जर तुम्ही कॉन्फिगमधून फीचर काढून टाकले, तर रूट्स (routes) गायब होतात. लाइव्ह एंडपॉइंट असलेले लपलेले फॉर्म हे सुरक्षेसाठी धोकादायक ठरू शकतात. रूट नसेल तर ४०४ (404) एरर येते.

तुमचा कोड साधा ठेवा. एखादी सेटिंग फाईल मधून आली आहे की डेटाबेस मधून, हे तुमच्या कंट्रोलर्स (controllers) आणि व्ह्यूजना (views) माहित नसावे. त्यांना फक्त config() दिसायला हवे.

Source: https://dev.to/nasrulhazim/admin-editable-settings-without-giving-up-config-2cj0