Erhan Yakut Software Developer @Binalyze | Founder @Passwall | Golang Enthusiast | Open Sorcerer

Laravel | Site Ayarları Oluşturma

52 sec read

laravel iletişim formu

Laravel ile içerik yönetim sistemi yazıyorsanız kullanıcı tarafından güncellenen bir site ayarları kısmı oluşturmanız da kaçınılmazdır. Aslında site ayarlarını oluşturmak çok da zor bir mevzu değil, Laravel’in standart 4 veritabanı işlemi olan CRUD (Create, Read, Update, Delete) ile yapabilirsiniz. Benim bu yazıda değinmek istediğim konu ise söz konusu site ayarlarının global değişken olarak tanımlanması ve istenildiği anda bu değerlerin ulaşılabilir olması.

Genel Görünüm

Site ayarlarının yönetim panelindeki genel görünümü aşağıdaki gibi olduğunu varsayalım.

Veritabanındaki Tablo Yapısı

Yukarıdaki genel görünüme ait veritabanı tablosunun da şu şekilde olduğunu düşünelim.

Servis Sağlayıcı (Service Provider) Oluşturulması

Yazımız için bir kilit kavram varsa o da Servis Sağlayıcı (Service Provider)’dır. Çünkü yapacağımız işlem site ayarlarını veritabanından çekip bir servis sağlayıcı ile uygulamamıza tanımlamaktır.

Aşağıdaki komut ile servis sağlayıcımızı oluşturalım.

[bash]php artisan make:provider SettingsServiceProvider[/bash]

Bu komut çalıştırıldığında app/Providers/SettingsServiceProvider.php isminde bir dosya oluşacaktır ve bu dosyanın içeriği yorum satırları çıkarıldıktan sonra aşağıdaki gibi görünecektir.

[php]boot ve register olmak üzere iki metod bulunur. Biz boot metodunu kullanarak istediğimiz tanımlamayı yapacağız.

Bizim settings isimli yukarıda içeriğinin resmi bulunan veritabanı tablosu için oluşturmuş olduğumuz Model dosyasının isminin Setting olduğunu düşünelim. Buna istinaden yukarıda gördüğünüz boot metoduna aşağıdaki satırı ekliyoruz.

[php]config()->set(‘settings’, \App\Setting::pluck(‘value’,’slug’)->all());[/php]

Gerekli eklemeyi yaptıktan sonra servis sağlayıcımızın görünümü şu şekilde olacaktır.

[php]set(‘settings’, \App\Setting::pluck(‘value’,’slug’)->all());
}

public function register()
{
//
}
}[/php]

Bundan sonra yapmamız gereken son bir işlem kaldı, o da oluşturduğumuz servis sağlayıcının Laravel’e tanıtılması. Bunun için de Config/app.php dosyasını açıyoruz ve servis sağlayıcılar dizisine (Providers) aşağıdaki satırı ekliyoruz.

[php] ‘providers’ => [

App\Providers\SettingsServiceProvider::class,
],[/php]

Ayar Değişkenlerine Erişim

Artık ayarlarımız için gerekli tanımlamaları yapmış bulunuyoruz. Tek yapmamız gereken istediğimiz ayarı çekmek.

Örneğin site ismini (site_name) view dosyasında kullanmak istiyorsak istediğimiz ayarı aşağıdaki kodla çağırabiliriz.
[php]{{ config(‘settings.site_name’) }}[/php]

Controller dosyasında aynı ayarı kullanmak istiyorsak benzer şekilde aşağıdaki kodu kullanabiliriz.

[php][/php]

Ayarları Önbelleğe (Cache) Alma

Temel olarak ayarların oluşturulması ve kullanılmasına değindim ancak burada bir problemden bahsetmek lazım. Yukarıda bahsedilen kullanımda her istek yapıldığında yeniden veritabanına sorgu gönderilip tüm ayarlar tekrardan çekilmektedir. Uygulamanın performansını düşürecek ve sunucuyu gereksiz yere yoracak bu problemin çözümü ise ayarların önbelleğe (cache) kaydedilmesinden geçmektedir.

Seetings servis sağlayıcısına önbellek özelliği kazandırmak için yukarıda son şeklini verdiğimiz kodu aşağıdaki şekilde değiştirelim.

[php]remember(‘settings’, 60, function() use ($settings)
{
return $settings->pluck(‘value’, ‘slug’)->all();
});

config()->set(‘settings’, $settings);
}

public function register()
{
//
}
}[/php]

Bu kod ile aslında kullanım açısından hiçbir fark yoktur yani ayarları yine yukarıda bahsettiğim config('settings.site_name') şekilde çağırırız ancak bu sefer her çağırmamızda veritabanına sorgu gitmez. Yani bu kod ile “eğer önbellekte ayarlar varsa onları kullan, yoksa veritabanından çek” demiş oluruz uygulamamıza. Onun yerine önbellekten okuma yapılır ki en doğrusu da budur.

Peki ya kullanıcı (user), yönetim panelinden ayarları güncellediğinde önbellekteki kayıtlar nasıl sıfırlanacak? İşte bunun için de ayarları güncellemek için oluşturduğunuz Controller‘ın (muhtemelen SettingController) update metodunu aşağıdaki şekilde güncellemeniz gerekir.

[php]…
use Illuminate\Contracts\Cache\Factory;

class SettingController extends Controller
{

public function update(Request $request, $id, Factory $cache)
{

$cache->forget(‘settings’);

}
}[/php]

Laravel konusunda orta/ileri seviye bir yazı olduğunu düşündüğüm için değişkenleri ve sınıfları tek tek açıklamadım. Umarım faydalı bir yazı olmuştur. İyi kodlamalar.

Erhan Yakut Software Developer @Binalyze | Founder @Passwall | Golang Enthusiast | Open Sorcerer