જટિલ કોડ વગર એડમિન દ્વારા એડિટ કરી શકાય તેવી સેટિંગ્સ

એપ્સ સતત એક સમસ્યાનો સામનો કરે છે. કેટલીક સેટિંગ્સ .env ફાઇલમાં હોવી જોઈએ. અન્ય સેટિંગ્સ નવા કોડ ડિપ્લોય (deploy) વગર એડમિન પેનલ દ્વારા બદલાવી જોઈએ. ઉદાહરણોમાં સાઇટના નામ, ટાઇમઝોન અથવા રજીસ્ટ્રેશન સેટિંગ્સનો સમાવેશ થાય છે.

ઘણા ડેવલપર્સ આને ડેટાબેઝમાં સ્ટોર કરે છે પરંતુ તેનાથી ગડબડ થઈ જાય છે. અંતે તમારી પાસે ડેટા વાંચવા માટે બે રીતો બની જાય છે. તમારા એપનો એક ભાગ config() નો ઉપયોગ કરે છે જ્યારે બીજો ભાગ ડેટાબેઝ મોડેલનો ઉપયોગ કરે છે. આના કારણે બગ્સ (bugs) સર્જાય છે જ્યાં સેટિંગ્સ અસંગત (inconsistent) હોય છે.

તમે સિંગલ રીડ પાથ (single read path) નો ઉપયોગ કરીને આનાથી બચી શકો છો. ડેટાબેઝને એક લેયર તરીકે ગણો જે બૂટ (boot) પ્રક્રિયા દરમિયાન તમારા config પર ઓવરલે (overlay) થાય છે.

તેને કેવી રીતે બનાવવું તે અહીં છે:

• સિંગલ સોર્સ ઓફ ટ્રુથ (single source of truth) નો ઉપયોગ કરો. ડેટાબેઝ કિંમત ધરાવે છે, પરંતુ એપ્લિકેશન ફક્ત config() દ્વારા જ તેને વાંચે છે. • ટાઇપ્ડ ક્લાસીસ (typed classes) નો ઉપયોગ કરો. લૂઝ એરે (loose arrays) ને બદલે, સ્ટ્રિક્ટ ટાઇપ્સ (strict types) ધરાવતા ક્લાસીસનો ઉપયોગ કરો. આનાથી ટાઇપો (typos) અને સાયલન્ટ એરર્સ (silent errors) અટકાવી શકાય છે. • બૂટ પ્રક્રિયા દરમિયાન સેટિંગ્સ લોડ કરો. ડેટાબેઝની કિંમતો ખેંચવા અને તેને config એરેમાં પુશ કરવા માટે સર્વિસ પ્રોવાઇડર (service provider) નો ઉપયોગ કરો.

આ બે ટેકનિકલ જાળ (traps) થી સાવધ રહો:

  1. ધ ટાઇમઝોન ટ્રેપ (The Timezone Trap) Laravel બૂટ પ્રક્રિયાની શરૂઆતમાં જ ટાઇમઝોન સેટ કરે છે. જો તમે પછીથી config વેલ્યુ બદલો છો, તો PHP હજુ પણ જૂના ટાઇમઝોનનો ઉપયોગ કરશે. ગ્લોબલ PHP સેટિંગને તમારી નવી config વેલ્યુ સાથે સિંક કરવા માટે તમારે મેન્યુઅલી date_default_timezone_set() કોલ કરવું પડશે.

  2. ધ ફ્રેશ ઇન્સ્ટોલ ટ્રેપ (The Fresh Install Trap) નવી એપમાં કોઈ ડેટાબેઝ ટેબલ હોતા નથી. જો સેટિંગ્સ ટેબલ ન હોવાને કારણે તમારી બૂટ પ્રક્રિયા નિષ્ફળ જાય છે, તો એપ શરૂ થશે નહીં. જો એપ બૂટ થવામાં નિષ્ફળ જાય તો તમે માઈગ્રેશન્સ (migrations) રન કરી શકતા નથી. તમારા સેટિંગ્સ લોજિકને try/catch બ્લોકમાં લપેટી (wrap) દો. આનાથી જ્યાં સુધી તમે તમારા માઈગ્રેશન્સ રન ન કરો ત્યાં સુધી એપને .env ડિફોલ્ટ્સ પર પાછા જવાની (fall back) છૂટ મળશે.

સુરક્ષા માટે બીજી ટિપ: રજીસ્ટ્રેશન જેવી સુવિધાને ડિસેબલ કરતી વખતે, ફક્ત UI માં બટન છુપાવી ન દો. સુવિધાને config માંથી સંપૂર્ણપણે દૂર કરો. જો તમે config માંથી સુવિધા દૂર કરો છો, તો રૂટ્સ (routes) પણ અદૃશ્ય થઈ જશે. લાઈવ એન્ડપોઈન્ટ (endpoint) ધરાવતું છુપાયેલું ફોર્મ સુરક્ષા જોખમ છે. મિસિંગ રૂટ 404 રિટર્ન કરે છે.

તમારો કોડ સરળ રાખો. તમારા કંટ્રોલર્સ અને વ્યૂઝને ખબર હોવી જોઈએ નહીં કે સેટિંગ ફાઇલમાંથી આવ્યું છે કે ડેટાબેઝમાંથી. તેઓએ ફક્ત config() જ જોવું જોઈએ.

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