İçeriğe geç

Laravel’de Veritabanı Bildirimlerinin Tipi Nasıl Değiştirilir?

Bildiğiniz gibi Laravel bildirimler için Database, Broadcast, SMS ve Slack kanallarını halihazırda sunmakta. Biz de projelerimizi geliştirirken bunları sık sık kullanıyoruz. Ben kendi projelerimde en çok Database ve Broadcast kanallarını kullanıyorum. Ayrıca Laravel ihtiyaçlarımıza uygun kanal oluşturmaya da imkân tanıyor.

Ben projelerimi modüler olarak geliştirdiğim için bildirimleri de modüler olarak ayırmaya çalışıyorum. Bu nedenle Database bildirim kanalını her projede değiştirmek zorunda kalıyorum.

Bilindiği gibi Laravel notifications tablosundaki type alanında bizim bildirim sınıfının tam yolunu saklıyor. Örneğin MessageSentNotification adında bir bildirimimiz varsa bu veritabanına type alanında App\Notifications\User\Chat\MessageSentNotification olarak kaydediliyor. User\Chat\ kısmı benim modüller yapıdan dolayı geldi. Eğer bildirim sınıflarınızı alt klasörlere taşımadıysanız sizde App\Notifications\MessageSentNotification şeklinde görünür.

Hal böyle olunca eğer frontent tarafında bildirimlerinizi tiplerine göre farklı şekillerde göstermek isterseniz mecburen App\Notifications\User\Chat\MessageSentNotification şeklinde kontrol etmeniz gerekir. Frontend ve backend tarafları farklı kişiler tarafından geliştiriliyorsa veya bir API ile bu bildirimleri de dışarı vermeniz gerekiyorsa backend mimarinizi açıkça ortaya koymuş olursunuz. Şimdi benim bu durumu atlatmak için izlediğim adımları görelim..

İlk olarak Illuminate\Notifications\Channels\DatabaseChannel sınıfını App\Notification aldında CustomDBChannel adıyla kopyalayalım.

Not: Kodların uzamaması için açıklama satırlarını sildim.

Ardından namespace hatası vermemesi için namespace Illuminate\Notifications\Channels; yerine namespace App\Notifications; yazalım.

Gördüğünüz gibi 'type' => get_class($notification), satırında type atamasını bizim müdahale edemeyeceğimiz şekilde kendisi yapıyor. Biz burayı değiştirip aşağıdaki gibi yapalım.

Bu değişilikle eğer varsa MessageSentNotification sınıfındaki $type değerini al, yoksa kendi bildiğin gibi yap demiş oluyoruz.

Bildirim sınıfında ise 2 işlem yapmamız gerekiyor. İlk olarak $type adında property tanımlayıp değerini veritabanında görmek istediğimiz gibi yapmalıyız. Ardından via içindeki return ['database']; kısmını return [CustomDBChannel::class]; ile değiştirmemiz gerekiyor. Gerekli use App\Notifications\CustomDBChannel; tanımlamasını da yukarıya ekledikten sonra artık bildirim veritabanına kaydedilirse type sütununda App\Notifications\User\Chat\MessageSentNotification yerine MessageSent görünecektir.

Bu değişiklik sayesinde bildirim tiplerini istediğimiz gibi kaydetme imkânımız oldu.

Bildirimler hakkında farklı bilgiler edinmek isterseniz Laravel’de Event ve Notification Arasındaki Fark Nedir? yazımı okuyabilirsiniz.

 

Herhangi bir sorunuz olursa yorum yoluyla ulaşabilirsiniz.

Faydalı olması dileğiyle..

Tarih:LaravelPHPWeb Programlama

İlk Yorumu Siz Yapın

Bir cevap yazın

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

two × 4 =