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:

  1. 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.

  2. 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