הגדרות ניתנות לעריכה על ידי מנהל ללא קוד מורכב
אפליקציות מתמודדות עם בעיה קבועה. חלק מההגדרות שייכות לקובץ .env. הגדרות אחרות חייבות להשתנות דרך פאנל ניהול ללא פריסת קוד (deploy) חדשה. דוגמאות כוללות שמות אתרים, אזורי זמן או הגדרות הרשמה.
מפתחים רבים שומרים אותן במסד נתונים אך יוצרים בלגן. בסופו של דבר נוצרות שתי דרכים לקריאת נתונים. חלק אחד של האפליקציה משתמש ב-config() בעוד חלק אחר משתמש במודל של מסד הנתונים. זה מוביל לבאגים שבהם ההגדרות אינן עקביות.
ניתן להימנע מכך על ידי שימוש בנתיב קריאה יחיד. התייחסו למסד הנתונים כשכבה שמתלבשת על ה-config שלכם בזמן ה-boot.
כך בונים זאת:
• השתמשו במקור אמת יחיד (single source of truth). מסד הנתונים מחזיק את הערך, אך האפליקציה קוראת אותו רק דרך config().
• השתמשו במחלקות עם טיפוסים (typed classes). במקום מערכים חופשיים, השתמשו במחלקות עם טיפוסים קשיחים (strict types). זה מונע שגיאות כתיב ושגיאות שקטות.
• טענו הגדרות במהלך תהליך ה-boot. השתמשו ב-service provider כדי למשוך ערכים ממסד הנתונים ולהזין אותם לתוך מערך ה-config.
היזהרו משתי המלכודות הטכניות הללו:
מלכודת אזור הזמן (The Timezone Trap) Laravel מגדיר את אזור הזמן בשלב מוקדם בתהליך ה-boot. אם תשנו את ערך ה-config מאוחר יותר, PHP עדיין ישתמש באזור הזמן הישן. עליכם לקרוא ל-
date_default_timezone_set()באופן ידני כדי לסנכרן את הגדרת ה-PHP הגלובלית עם ערך ה-config החדש שלכם.מלכודת ההתקנה החדשה (The Fresh Install Trap) לאפליקציה חדשה אין טבלאות במסד הנתונים. אם תהליך ה-boot נכשל כי טבלת ההגדרות חסרה, האפליקציה לא תעלה. לא ניתן להריץ migrations אם האפליקציה נכשלת בעלייה. עטפו את לוגיקת ההגדרות שלכם בבלוק
try/catch. זה מאפשר לאפליקציה לחזור לברירת המחדל של ה-.env עד שתריצו את ה-migrations שלכם.
טיפ נוסף לאבטחה: כשאתם מבטלים פיצ'ר כמו הרשמה, אל תסתפקו רק בהסתרת הכפתור בממשק המשתמש (UI). הסירו את הפיצ'ר מה-config לחלוטין. אם תסירו את הפיצ'ר מה-config, ה-routes ייעלמו. טופס מוסתר עם endpoint פעיל הוא סיכון אבטחה. route חסר מחזיר 404.
שמרו על הקוד שלכם פשוט. ה-controllers וה-views שלכם לא צריכים לדעת אם הגדרה הגיעה מקובץ או ממסד נתונים. הם צריכים לראות רק את config().
מקור: https://dev.to/nasrulhazim/admin-editable-settings-without-giving-up-config-2cj0
