Admin-Editable Settings Without Complex Code

ആപ്പുകൾ എപ്പോഴും നേരിടുന്ന ഒരു പ്രശ്നമാണിത്. ചില സെറ്റിംഗുകൾ ഒരു .env ഫയലിൽ ഉൾപ്പെടുത്തേണ്ടവയാണ്. എന്നാൽ മറ്റു ചില സെറ്റിംഗുകൾ, പുതിയ കോഡ് ഡെപ്ലോയ്മെന്റുകൾ ഇല്ലാതെ തന്നെ ഒരു അഡ്മിൻ പാനൽ വഴി മാറ്റാൻ കഴിയുന്നവയായിരിക്കണം. സൈറ്റ് പേരുകൾ, ടൈംസോണുകൾ (timezones), അല്ലെങ്കിൽ രജിസ്ട്രേഷൻ സെറ്റിംഗുകൾ എന്നിവ ഇതിന് ഉദാഹരണങ്ങളാണ്.

പല ഡെവലപ്പർമാരും ഇവ ഡാറ്റാബേസിൽ സൂക്ഷിക്കാറുണ്ടെങ്കിലും അത് വലിയൊരു കുഴപ്പത്തിന് കാരണമാകുന്നു. ഡാറ്റ വായിക്കാൻ രണ്ട് വഴികൾ ഉണ്ടാകുന്നു എന്നതാണ് ഇതിന്റെ പ്രശ്നം. നിങ്ങളുടെ ആപ്പിന്റെ ഒരു ഭാഗം config() ഉപയോഗിക്കുമ്പോൾ മറ്റൊരു ഭാഗം ഒരു ഡാറ്റാബേസ് മോഡൽ ഉപയോഗിക്കുന്നു. ഇത് സെറ്റിംഗുകൾ തമ്മിൽ പൊരുത്തക്കേടുകൾ ഉണ്ടാക്കുന്ന ബഗുകൾക്ക് (bugs) കാരണമാകുന്നു.

ഒരു സിംഗിൾ റീഡ് പാത്ത് (single read path) ഉപയോഗിക്കുന്നതിലൂടെ നിങ്ങൾക്ക് ഇത് ഒഴിവാക്കാം. ആപ്പ് ബൂട്ട് ചെയ്യുമ്പോൾ നിങ്ങളുടെ കോൺഫിഗറിന് മുകളിൽ ഒരു ലെയർ ആയി ഡാറ്റാബേസിനെ പരിഗണിക്കുക.

ഇത് എങ്ങനെ നിർമ്മിക്കാം എന്ന് താഴെ നൽകുന്നു:

• ഒരു സിംഗിൾ സോഴ്സ് ഓഫ് ട്രൂത്ത് (single source of truth) ഉപയോഗിക്കുക. ഡാറ്റാബേസ് മൂല്യം സൂക്ഷിക്കുന്നുണ്ടെങ്കിലും, ആപ്ലിക്കേഷൻ config() വഴി മാത്രമേ അത് വായിക്കുന്നുള്ളൂ എന്ന് ഉറപ്പാക്കുക. • ടൈപ്പ്ഡ് ക്ലാസുകൾ (typed classes) ഉപയോഗിക്കുക. ലൂസ് ആയ അറേകൾക്ക് (loose arrays) പകരം സ്ട്രിക്റ്റ് ടൈപ്പുകൾ ഉള്ള ക്ലാസുകൾ ഉപയോഗിക്കുക. ഇത് ടൈപ്പിംഗ് പിശകുകളും (typos) മറ്റ് തെറ്റുകളും ഒഴിവാക്കാൻ സഹായിക്കും. • ബൂട്ട് പ്രോസസ്സിനിടെ സെറ്റിംഗുകൾ ലോഡ് ചെയ്യുക. ഡാറ്റാബേസ് മൂല്യങ്ങൾ എടുത്ത് അവ config അറേയിലേക്ക് ചേർക്കാൻ ഒരു സർവീസ് പ്രൊവൈഡർ (service provider) ഉപയോഗിക്കുക.

ഈ രണ്ട് സാങ്കേതിക കെണികൾ ശ്രദ്ധിക്കുക:

  1. The Timezone Trap Laravel ബൂട്ട് പ്രോസസ്സിന്റെ തുടക്കത്തിൽ തന്നെ ടൈംസോൺ സെറ്റ് ചെയ്യുന്നു. നിങ്ങൾ പിന്നീട് കോൺഫിഗ് മൂല്യം മാറ്റിയാലും, PHP പഴയ ടൈംസോൺ തന്നെ ഉപയോഗിച്ചുകൊണ്ടേയിരിക്കും. ഗ്ലോബൽ PHP സെറ്റിംഗും നിങ്ങളുടെ പുതിയ കോൺഫിഗ് മൂല്യവും ഒരേപോലെയാക്കാൻ നിങ്ങൾ date_default_timezone_set() മാനുവലായി വിളിക്കേണ്ടതുണ്ട്.

  2. The Fresh Install Trap ഒരു പുതിയ ആപ്പിന് ഡാറ്റാബേസ് ടേബിളുകൾ ഉണ്ടാകില്ല. സെറ്റിംഗ്സ് ടേബിൾ ഇല്ലാത്തതിനാൽ ബൂട്ട് പ്രോസസ്സ് പരാജയപ്പെട്ടാൽ ആപ്പ് പ്രവർത്തിക്കില്ല. ആപ്പ് ബൂട്ട് ആകാൻ സാധിച്ചില്ലെങ്കിൽ നിങ്ങൾക്ക് മൈഗ്രേഷൻസ് (migrations) റൺ ചെയ്യാൻ കഴിയില്ല. അതിനാൽ നിങ്ങളുടെ സെറ്റിംഗ്സ് ലോജിക് ഒരു try/catch ബ്ലോക്കിനുള്ളിൽ ഉൾപ്പെടുത്തുക. ഇത് നിങ്ങൾ മൈഗ്രേഷൻസ് റൺ ചെയ്യുന്നത് വരെ ആപ്പിനെ .env ഡിഫോൾട്ട് മൂല്യങ്ങളിലേക്ക് തിരികെ പോകാൻ അനുവദിക്കുന്നു.

Another tip for security: രജിസ്ട്രേഷൻ പോലുള്ള ഒരു ഫീച്ചർ ഡിസേബിൾ ചെയ്യുമ്പോൾ, യുഐയിൽ (UI) ബട്ടൺ മാത്രം മറച്ചുവെച്ചാൽ പോരാ. ആ ഫീച്ചർ കോൺഫിഗറിൽ നിന്ന് പൂർണ്ണമായും നീക്കം ചെയ്യുക. കോൺഫിഗറിൽ നിന്ന് ഫീച്ചർ നീക്കം ചെയ്താൽ റൂട്ടുകൾ (routes) അപ്രത്യക്ഷമാകും. ഒരു ലൈവ് എൻഡ്പോയിന്റ് (endpoint) ഉള്ള മറച്ചുവെച്ച ഫോം ഒരു സുരക്ഷാ ഭീഷണിയാണ്. എന്നാൽ റൂട്ട് ഇല്ലാതിരുന്നാൽ അത് 404 എറർ കാണിക്കും.

നിങ്ങളുടെ കോഡ് ലളിതമായി സൂക്ഷിക്കുക. ഒരു സെറ്റിംഗ് ഫയലിൽ നിന്നാണോ അതോ ഡാറ്റാബേസിൽ നിന്നാണോ വന്നതെന്ന് നിങ്ങളുടെ കൺട്രോളറുകൾക്കും (controllers) വ്യൂസിനും (views) അറിയാൻ പാടില്ല. അവർക്ക് config() മാത്രമേ കാണാൻ കഴിയാവൂ.

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