laravel

Laravel Global Değişken Tanımlama ve Heryerden Çağırma

Laravelde bir web sitesi oluşturduğunuzda bazı değişkenler sabittir ve heryerden çağırmak ve kullanmak isteyebilirsiniz. Bunu sürekli controller veya blade dosyalarınızda ayrı ayrı sorgulamak yerine tek bir yerde sorgulayıp aynı Laravel’de Helper Tanımlama da olduğu gibi kullanabilirsiniz.

Bundaki amaç örneğin site için kullandığınız Ayarlar tablonuz var ise bu tablodaki değerleri istediğimiz her yerden direkt olarak okuyup kullanabilmek. Bunu yaparkende herhangi bir controller veya view dosyasından tekrar eden sorgulardan kaçınmak.

Burada size iki yöntem vereceğim ilki eğer bir tablodan bu değerler çekiliyorsa ona göre işlem ikincisi ise hiç değişmeyecek değişkenler için bir başka yöntem.

İlk Yöntem: Tablodan Alma

Nasıl Yapılır?

Ben kendime bir setting tablosu oluşturdum. Burada sitenin ayarlarını tutuyorum. Bu tabloda da type ve value şeklinde iki alan mevcut. Burada type ayarın tipi, value da ayarın değerini içermektedir. Ve bu tablo içinde model oluşturdum.

İlk önce App\Providers\AppServiceProvider.php dosyasını açın.

Eğer boot fonksiyonu var ise sadece config kısmını eğer yok ise tamamını alıp bu dosya içerisine yapıştırın.

/**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        config([
            'setting' => \App\Models\Setting::get(['type','value'])->keyBy('type')->transform(function ($setting) {return $setting->value;})->toArray(),
        ]);
    }

Bu kod şu işlemi yapıyor. Setting tablosundan type ve value alanlarını alıyor ve dizi şeklinde geri döndürüyor. Ayrıca ->keyBy(‘type’) kısmı ilede dizinin index kısımlarını type sonuçlarına göre oluşturuyor.

Nasıl Kullanılır?

Bu işlemi yaptıktan sonra tablonuza birkaç değer girin sonrasında örneğin bir view dosyanızın içine bu değerleri yazdırın.

Ben örneğin sosyal medya linklerini bu şekilde footer’ a yazdırma işlemini yapacağım.

@if(config('setting')['facebook'] != null)
    <a href="{{config('setting')['facebook']}}" target="_blank" class="social_media"><i class="fab fa-facebook-f fa-lg"></i></a>
                
@endif
@if(config('setting')['twitter'] != null)
   <a href="{{config('setting')['twitter']}}" target="_blank" class="social_media"><i class="fab fa-twitter fa-lg"></i></a>
@endif
 @if(config('setting')['instagram'] != null)
    <a href="{{config('setting')['instagram']}}" target="_blank" class="social_media"><i class="fab fa-instagram fa-lg"></i></a>
@endif
@if(config('setting')['youtube'] != null)
   <a href="{{config('setting')['youtube']}}" target="_blank" class="social_media"><i class="fab fa-youtube fa-lg"></i></a>
@endif

Buradaki örnekte ayarlardan gelen ilgili sosya medya linki boş değil ise onun linkini ekrana yazmaktadır. Bu şekilde kendiniz yapınıza göre bu işlemi gerçekleştirebilirsiniz. Buradaki değişkenleri aynı şekilde controller dosyanızda da kullanabilirsiniz. Mesela bir panel yazdığınızda sosyal medya linki değiştirilirse bu link otomatik olarak her yerde güncellenmiş olacaktır.

İkinci Yöntem: Sabitler Dosyası Oluşturma

Bu işlem yukarıdaki işleme göre daha kolay. Ancak sonradan kullanıcı panelden değiştiremez veya yönetemez. Yukarıda sosyal medya için linkleri değiştirdiğinde anında ilgili yerlerin değeri değiştirilir. Bu yöntemde kalıcıdır ve kod yazan kişinin koda müdahale etmesi gerekir.

Bu işlemde congif klasörüne gelin ve içerisine constants.php adlı bir dosya oluşturun.

İçeriğinide şu şekilde örnek kod ile oluşturun.

<?php

return [
	'setting' => [
		'page_length' => 10
	],
];

Bu kodu ekledikten sonra sayfalama olan her yerde sayfa sayısını çekeceğiniz yer bu kısım olacaktır. Ancak dediğim gibi bu kısmı kullanıcı değiştiremez. Eğer değiştirilebilir bir yapıda olsun derseniz üstteki yöntem sizin işinizi görecektir.

Bu şekilde tanımdan sonra ister controller ister view dosyaları içerisinde

config('constants.setting.page_length') 

şeklinde yazın. Sonrasında değeri yazdırdığınızda 10 değerini yazdığını göreceksiniz.

Bildiğiniz başka yöntem veya daha iyi bir mantık var ise yorumda belirtirseniz yazıya ekleme yapabilirim. İyi Çalışmalar.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir