ಸಂಕೀರ್ಣವಾದ ಕೋಡ್ ಇಲ್ಲದೆ ಅಡ್ಮಿನ್ ಮೂಲಕ ಬದಲಾಯಿಸಬಹುದಾದ ಸೆಟ್ಟಿಂಗ್ಗಳು
ಅಪ್ಲಿಕೇಶನ್ಗಳು ನಿರಂತರವಾಗಿ ಒಂದು ಸಮಸ್ಯೆಯನ್ನು ಎದುರಿಸುತ್ತವೆ. ಕೆಲವು ಸೆಟ್ಟಿಂಗ್ಗಳು .env ಫೈಲ್ನಲ್ಲಿ ಇರಬೇಕು. ಇತರ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಹೊಸ ಕೋಡ್ ಡಿಪ್ಲಾಯ್ ಮಾಡದೆಯೇ ಅಡ್ಮಿನ್ ಪ್ಯಾನಲ್ ಮೂಲಕ ಬದಲಾಯಿಸಬೇಕಾಗುತ್ತದೆ. ಉದಾಹರಣೆಗೆ ಸೈಟ್ ಹೆಸರುಗಳು, ಟೈಮ್ಜೋನ್ ಅಥವಾ ನೋಂದಣಿ (registration) ಸೆಟ್ಟಿಂಗ್ಗಳು.
ಅನೇಕ ಡೆವಲಪರ್ಗಳು ಇವುಗಳನ್ನು ಡೇಟಾಬೇಸ್ನಲ್ಲಿ ಸಂಗ್ರಹಿಸುತ್ತಾರೆ ಆದರೆ ಇದರಿಂದ ಗೊಂದಲ ಉಂಟಾಗುತ್ತದೆ. ಡೇಟಾವನ್ನು ಓದಲು ನೀವು ಎರಡು ವಿಧಗಳನ್ನು ಬಳಸಬೇಕಾಗುತ್ತದೆ. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ನ ಒಂದು ಭಾಗ config() ಅನ್ನು ಬಳಸಿದರೆ, ಇನ್ನೊಂದು ಭಾಗ ಡೇಟಾಬೇಸ್ ಮಾಡೆಲ್ ಅನ್ನು ಬಳಸುತ್ತದೆ. ಇದು ಸೆಟ್ಟಿಂಗ್ಗಳು ಅಸಮಂಜಸವಾಗುವ (inconsistent) ಬಗ್ಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ.
ಒಂದೇ ಓದುವ ಮಾರ್ಗವನ್ನು (single read path) ಬಳಸುವ ಮೂಲಕ ನೀವು ಇದನ್ನು ತಪ್ಪಿಸಬಹುದು. ಬೂಟ್ ಪ್ರಕ್ರಿಯೆಯ ಸಮಯದಲ್ಲಿ ನಿಮ್ಮ ಕಾನ್ಫಿಗರೇಶನ್ ಮೇಲೆ ಒಂದು ಪದರವಾಗಲಿ (overlay) ಡೇಟಾಬೇಸ್ ಅನ್ನು ಪರಿಗಣಿಸಿ.
ಇದನ್ನು ನಿರ್ಮಿಸುವುದು ಹೇಗೆ:
• ಒಂದೇ ಮೂಲ ಸತ್ಯವನ್ನು (single source of truth) ಬಳಸಿ. ಡೇಟಾಬೇಸ್ ಮೌಲ್ಯವನ್ನು ಹೊಂದಿರಲಿ, ಆದರೆ ಅಪ್ಲಿಕೇಶನ್ ಕೇವಲ config() ಮೂಲಕವೇ ಓದಲಿ.
• ಟೈಪ್ಡ್ ಕ್ಲಾಸ್ಗಳನ್ನು (typed classes) ಬಳಸಿ. ಲೂಸ್ ಅರೇಗಳ ಬದಲಿಗೆ, ಕಟ್ಟುನಿಟ್ಟಾದ ಟೈಪ್ಗಳನ್ನು ಹೊಂದಿರುವ ಕ್ಲಾಸ್ಗಳನ್ನು ಬಳಸಿ. ಇದು ಟೈಪೋಗಳು ಮತ್ತು ಸೈಲೆಂಟ್ ಎರರ್ಗಳನ್ನು ತಡೆಯುತ್ತದೆ.
• ಬೂಟ್ ಪ್ರಕ್ರಿಯೆಯ ಸಮಯದಲ್ಲಿ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಲೋಡ್ ಮಾಡಿ. ಡೇಟಾಬೇಸ್ ಮೌಲ್ಯಗಳನ್ನು ಪಡೆಯಲು ಮತ್ತು ಅವುಗಳನ್ನು config ಅರೇಗೆ ಸೇರಿಸಲು ಸರ್ವಿಸ್ ಪ್ರೊವೈಡರ್ ಅನ್ನು ಬಳಸಿ.
ಈ ಎರಡು ತಾಂತ್ರಿಕ ಬಲೆಗಳ ಬಗ್ಗೆ ಎಚ್ಚರವಿರಲಿ:
ಟೈಮ್ಜೋನ್ ಬಲೆ (The Timezone Trap) Laravel ಬೂಟ್ ಪ್ರಕ್ರಿಯೆಯ ಆರಂಭದಲ್ಲಿಯೇ ಟೈಮ್ಜೋನ್ ಅನ್ನು ಸೆಟ್ ಮಾಡುತ್ತದೆ. ನೀವು ನಂತರ ಕಾನ್ಫಿಗರೇಶನ್ ಮೌಲ್ಯವನ್ನು ಬದಲಾಯಿಸಿದರೆ, PHP ಇನ್ನೂ ಹಳೆಯ ಟೈಮ್ಜೋನ್ ಅನ್ನು ಬಳಸುತ್ತದೆ. ಗ್ಲೋಬಲ್ PHP ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ನಿಮ್ಮ ಹೊಸ ಕಾನ್ಫಿಗರೇಶನ್ ಮೌಲ್ಯದೊಂದಿಗೆ ಸಿಂಕ್ ಮಾಡಲು ನೀವು
date_default_timezone_set()ಅನ್ನು ಮ್ಯಾನುಯಲ್ ಆಗಿ ಕರೆಯಲೇಬೇಕು.ಫ್ರೆಶ್ ಇನ್ಸ್ಟಾಲ್ ಬಲೆ (The Fresh Install Trap) ಹೊಸ ಅಪ್ಲಿಕೇಶನ್ಗೆ ಯಾವುದೇ ಡೇಟಾಬೇಸ್ ಟೇಬಲ್ಗಳು ಇರುವುದಿಲ್ಲ. ಸೆಟ್ಟಿಂಗ್ಸ್ ಟೇಬಲ್ ಇಲ್ಲದ ಕಾರಣ ನಿಮ್ಮ ಬೂಟ್ ಪ್ರಕ್ರಿಯೆಯು ವಿಫಲವಾದರೆ, ಅಪ್ಲಿಕೇಶನ್ ಪ್ರಾರಂಭವಾಗುವುದಿಲ್ಲ. ಅಪ್ಲಿಕೇಶನ್ ಬೂಟ್ ಆಗಲು ವಿಫಲವಾದರೆ ನೀವು ಮೈಗ್ರೇಷನ್ಗಳನ್ನು (migrations) ನಡೆಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ನಿಮ್ಮ ಸೆಟ್ಟಿಂಗ್ಸ್ ಲಾಜಿಕ್ ಅನ್ನು
try/catchಬ್ಲಾಕ್ನಲ್ಲಿ ಇರಿಸಿ. ಇದು ನೀವು ಮೈಗ್ರೇಷನ್ಗಳನ್ನು ಮಾಡುವವರೆಗೆ ಅಪ್ಲಿಕೇಶನ್ .env ಡಿಫಾಲ್ಟ್ಗಳಿಗೆ ಮರಳಲು (fall back) ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.
ಭದ್ರತೆಗಾಗಿ ಇನ್ನೊಂದು ಸಲಹೆ: ನೋಂದಣಿ (registration) ನಂತಹ ಫೀಚರ್ ಅನ್ನು ಡಿಸೇಬಲ್ ಮಾಡುವಾಗ, ಕೇವಲ UI ನಲ್ಲಿ ಬಟನ್ ಅನ್ನು ಮರೆಮಾಚಬೇಡಿ. ಆ ಫೀಚರ್ ಅನ್ನು ಕಾನ್ಫಿಗರೇಶನ್ನಿಂದ ಸಂಪೂರ್ಣವಾಗಿ ತೆಗೆದುಹಾಕಿ. ನೀವು ಕಾನ್ಫಿಗರೇಶನ್ನಿಂದ ಫೀಚರ್ ಅನ್ನು ತೆಗೆದುಹಾಕಿದರೆ, ರೂಟ್ಗಳು (routes) ಮಾಯವಾಗುತ್ತವೆ. ಲೈವ್ ಎಂಡ್ಪಾಯಿಂಟ್ ಹೊಂದಿರುವ ಮರೆಮಾಚಿದ ಫಾರ್ಮ್ ಒಂದು ಭದ್ರತಾ ಅಪಾಯವಾಗಿದೆ. ರೂಟ್ ಇಲ್ಲದಿದ್ದರೆ ಅದು 404 ಅನ್ನು ರಿಟರ್ನ್ ಮಾಡುತ್ತದೆ.
ನಿಮ್ಮ ಕೋಡ್ ಅನ್ನು ಸರಳವಾಗಿಡಿ. ನಿಮ್ಮ ಕಂಟ್ರೋಲರ್ಗಳು ಮತ್ತು ವ್ಯೂಸ್ಗಳಿಗೆ ಸೆಟ್ಟಿಂಗ್ ಫೈಲ್ನಿಂದ ಬಂದಿದೆಯೇ ಅಥವಾ ಡೇಟಾಬೇಸ್ನಿಂದ ಬಂದಿದೆಯೇ ಎಂಬುದು ತಿಳಿದಿರಬಾರದು. ಅವು ಕೇವಲ config() ಅನ್ನು ಮಾತ್ರ ನೋಡಬೇಕು.
ಮೂಲ: https://dev.to/nasrulhazim/admin-editable-settings-without-giving-up-config-2cj0
