پیچیدہ کوڈ کے بغیر ایڈمن کے قابل ترتیبات (Admin-Editable Settings)

ایپس کو ایک مستقل مسئلے کا سامنا رہتا ہے۔ کچھ ترتیبات .env فائل میں ہونی چاہئیں۔ دیگر ترتیبات کو نیا کوڈ ڈیپلائے کیے بغیر ایڈمن پینل کے ذریعے تبدیل ہونا چاہیے۔ مثالوں میں سائٹ کے نام، ٹائم زونز، یا رجسٹریشن کی ترتیبات شامل ہیں۔

بہت سے ڈویلپرز انہیں ڈیٹا بیس میں محفوظ کرتے ہیں لیکن اس سے الجھن پیدا ہو جاتی ہے۔ آپ کے پاس ڈیٹا پڑھنے کے دو طریقے ہو جاتے ہیں۔ آپ کی ایپ کا ایک حصہ config() استعمال کرتا ہے جبکہ دوسرا حصہ ڈیٹا بیس ماڈل استعمال کرتا ہے۔ اس سے ایسے بگ (bugs) پیدا ہوتے ہیں جہاں ترتیبات میں تضاد آ جاتا ہے۔

آپ ڈیٹا پڑھنے کا ایک واحد راستہ استعمال کر کے اس سے بچ سکتے ہیں۔ ڈیٹا بیس کو ایک ایسی تہہ (layer) کے طور پر سمجھیں جو بوٹ (boot) کے وقت آپ کی کنفیگریشن کے اوپر کام کرے۔

اسے بنانے کا طریقہ یہ ہے:

• ایک واحد ذریعے (single source of truth) کا استعمال کریں۔ ڈیٹا بیس ویلیو کو محفوظ رکھتا ہے، لیکن ایپلی کیشن صرف config() کے ذریعے اسے پڑھتی ہے۔ • ٹائپڈ کلاسز (typed classes) کا استعمال کریں۔ غیر منظم ایرے (loose arrays) کے بجائے، سخت ٹائپس (strict types) والی کلاسز استعمال کریں۔ یہ ٹائپو (typos) اور خاموش غلطیوں (silent errors) کو روکتا ہے۔ • بوٹ کے عمل کے دوران ترتیبات لوڈ کریں۔ ڈیٹا بیس کی ویلیوز نکالنے اور انہیں config ایرے میں ڈالنے کے لیے سروس پرووائیڈر (service provider) کا استعمال کریں۔

ان دو تکنیکی جالوں (traps) سے ہوشیار رہیں:

  1. ٹائم زون کا جال (The Timezone Trap) Laravel بوٹ کے عمل کے آغاز میں ہی ٹائم زون سیٹ کر دیتا ہے۔ اگر آپ بعد میں کنفیگ ویلیو تبدیل کرتے ہیں، تو PHP اب بھی پرانے ٹائم زون کا استعمال کرتا ہے۔ آپ کو اپنی نئی کنفیگ ویلیو کے ساتھ گلوبل PHP سیٹنگ کو سنک (sync) کرنے کے لیے دستی طور پر date_default_timezone_set() کال کرنا ہوگا۔

  2. نئی انسٹالیشن کا جال (The Fresh Install Trap) ایک نئی ایپ میں کوئی ڈیٹا بیس ٹیبلز نہیں ہوتے۔ اگر آپ کا بوٹ عمل سیٹنگز ٹیبل نہ ہونے کی وجہ سے ناکام ہو جاتا ہے، تو ایپ شروع نہیں ہوگی۔ اگر ایپ بوٹ ہونے میں ناکام ہو جائے تو آپ مائیگریشنز (migrations) نہیں چلا سکتے۔ اپنی سیٹنگز لاجک کو try/catch بلاک میں رکھیں۔ یہ ایپ کو مائیگریشنز چلانے تک .env کی ڈیفالٹ ویلیوز پر واپس جانے کی اجازت دیتا ہے۔

سیکیورٹی کے لیے ایک اور مشورہ: رجسٹریشن جیسی فیچر کو غیر فعال کرتے وقت، اسے صرف UI میں چھپائیں نہیں۔ فیچر کو مکمل طور پر کنفیگ سے ہٹا دیں۔ اگر آپ کنفیگ سے فیچر ہٹا دیتے ہیں، تو روٹس (routes) غائب ہو جاتے ہیں۔ ایک لائیو اینڈ پوائنٹ (endpoint) کے ساتھ چھپا ہوا فارم سیکیورٹی کا خطرہ ہے۔ ایک غائب روٹ 404 واپس کرتا ہے۔

اپنے کوڈ کو سادہ رکھیں۔ آپ کے کنٹرولرز اور ویوز کو یہ معلوم نہیں ہونا چاہیے کہ کوئی سیٹنگ فائل سے آئی ہے یا ڈیٹا بیس سے۔ انہیں صرف config() نظر آنا چاہیے۔

ماخذ: https://dev.to/nasrulhazim/admin-editable-settings-without-giving-up-config-2cj0