Karmaşık Kod Yazmadan Yönetici Tarafından Düzenlenebilir Ayarlar
Uygulamalar sürekli bir sorunla karşı karşıyadır. Bazı ayarlar bir .env dosyasında bulunmalıdır. Diğer ayarlar ise yeni bir kod dağıtımı (deploy) yapmadan bir yönetici paneli aracılığıyla değiştirilebilmelidir. Örnekler arasında site adları, zaman dilimleri veya kayıt ayarları yer alır.
Birçok geliştirici bunları bir veritabanında saklar ancak bu durum bir karmaşaya yol açar. Sonuçta verileri okumak için iki farklı yöntemle karşı karşıya kalırsınız. Uygulamanızın bir kısmı config() kullanırken diğeri bir veritabanı modeli kullanır. Bu durum, ayarların tutarsız olmasına neden olan hatalara yol açar.
Bunu tek bir okuma yolu kullanarak önleyebilirsiniz. Veritabanını, açılış (boot) sırasında yapılandırmanızın (config) üzerine binen bir katman olarak değerlendirin.
Bunu şu şekilde inşa edebilirsiniz:
• Tek bir doğruluk kaynağı (single source of truth) kullanın. Değeri veritabanı tutar, ancak uygulama yalnızca config() üzerinden okuma yapar. • Tiplendirilmiş sınıflar kullanın. Esnek diziler yerine katı tiplere sahip sınıflar kullanın. Bu, yazım hatalarını ve sessiz hataları önler. • Ayarları açılış (boot) sürecinde yükleyin. Veritabanı değerlerini çekmek ve bunları config dizisine aktarmak için bir service provider kullanın.
Şu iki teknik tuzağa dikkat edin:
Zaman Dilimi Tuzağı Laravel, zaman dilimini açılış sürecinin erken bir aşamasında ayarlar. Eğer config değerini daha sonra değiştirirseniz, PHP hala eski zaman dilimini kullanmaya devam eder. Küresel PHP ayarını yeni config değerinizle senkronize etmek için date_default_timezone_set() fonksiyonunu manuel olarak çağırmalısınız.
Yeni Kurulum Tuzağı Yeni bir uygulamanın henüz veritabanı tabloları yoktur. Eğer ayarlar tablosu eksik olduğu için açılış süreciniz başarısız olursa, uygulama başlatılamaz. Uygulama açılışta hata verirse migration'ları çalıştıramazsınız. Ayar mantığınızı bir try/catch bloğu içine alın. Bu, migration'ları çalıştırana kadar uygulamanın .env varsayılanlarına geri dönmesini sağlar.
Güvenlik için başka bir ipucu: Kayıt olma gibi bir özelliği devre dışı bırakırken, sadece kullanıcı arayüzündeki (UI) butonu gizlemeyin. Özelliği yapılandırmadan (config) tamamen kaldırın. Özelliği config'den kaldırırsanız, rotalar (routes) da kaybolur. Canlı bir uç noktası (endpoint) olan gizli bir form güvenlik riski oluşturur. Eksik bir rota ise 404 döndürür.
Kodunuzu basit tutun. Controller'larınız ve view'larınız bir ayarın dosyadan mı yoksa veritabanından mı geldiğini bilmemelidir. Sadece config() görmelidirler.
Kaynak: https://dev.to/nasrulhazim/admin-editable-settings-without-giving-up-config-2cj0
