Admin-Editable Settings Without Complex Code
Aplikacje borykają się z ciągłym problemem. Niektóre ustawienia powinny znajdować się w pliku .env. Inne muszą być możliwe do zmiany za pomocą panelu administracyjnego bez konieczności ponownego wdrażania kodu. Przykładami są nazwy witryn, strefy czasowe czy ustawienia rejestracji.
Wielu programistów przechowuje je w bazie danych, ale tworzy przy tym chaos. Kończysz z dwoma sposobami odczytywania danych. Jedna część aplikacji używa config(), podczas gdy inna korzysta z modelu bazy danych. Prowadzi to do błędów, w których ustawienia są niespójne.
Możesz tego uniknąć, stosując jedną ścieżkę odczytu. Traktuj bazę danych jako warstwę, która nakłada się na Twoją konfigurację podczas procesu uruchamiania (boot).
Oto jak to zbudować:
• Korzystaj z jednego źródła prawdy. Baza danych przechowuje wartość, ale aplikacja odczytuje ją wyłącznie przez config().
• Używaj klas z typowaniem. Zamiast luźnych tablic, używaj klas ze ścisłymi typami. Zapobiega to literówkom i cichym błędom.
• Wczytuj ustawienia podczas procesu uruchamiania. Użyj service providera, aby pobrać wartości z bazy danych i wprowadzić je do tablicy config.
Uważaj na te dwie pułapki techniczne:
The Timezone Trap Laravel ustawia strefę czasową na wczesnym etapie procesu uruchamiania. Jeśli zmienisz wartość konfiguracji później, PHP nadal będzie używać starej strefy czasowej. Musisz ręcznie wywołać
date_default_timezone_set(), aby zsynchronizować globalne ustawienie PHP z nową wartością z konfiguracji.The Fresh Install Trap Nowa aplikacja nie posiada tabel w bazie danych. Jeśli proces uruchamiania zawiedzie z powodu braku tabeli z ustawieniami, aplikacja się nie uruchomi. Nie możesz uruchomić migracji, jeśli aplikacja nie może się wystartować. Zamknij logikę ustawień w bloku
try/catch. Pozwoli to aplikacji wrócić do domyślnych wartości z pliku .env, dopóki nie uruchomisz migracji.
Inna wskazówka dotycząca bezpieczeństwa: Wyłączając funkcję, taką jak rejestracja, nie ukrywaj po prostu przycisku w interfejsie użytkownika (UI). Całkowicie usuń tę funkcję z konfiguracji. Jeśli usuniesz funkcję z konfiguracji, trasy (routes) znikną. Ukryty formularz z aktywnym endpointem stanowi ryzyko bezpieczeństwa. Brakująca trasa zwraca błąd 404.
Dbaj o prostotę kodu. Twoje kontrolery i widoki nie powinny wiedzieć, czy ustawienie pochodzi z pliku, czy z bazy danych. Powinny widzieć jedynie config().
Source: https://dev.to/nasrulhazim/admin-editable-settings-without-giving-up-config-2cj0
