PHP

Laravel’de Özel Etkinlikler

Bu yazıda, Laravel’de olay yönetiminin temellerini keşfedeceğiz. Ayrıca özel bir olay ve dinleyicinin gerçek dünyadan bir örneğini oluşturacağız.

Laravel’deki olay kavramı, çok popüler bir yazılım tasarım modeline, yani gözlemci modeline dayanmaktadır. Bu modelde, bir şey olduğunda sistem olayları yükseltir ve bu olayları dinleyen ve buna göre tepki veren dinleyiciler tanımlayabilirsiniz. Bir sistemdeki bileşenleri ayırmanıza izin veren, aksi takdirde sıkı bir şekilde bağlanmış kodla sonuçlanacak gerçekten kullanışlı bir özelliktir.

Örneğin, birisi sitenize giriş yaptığında bir sistemdeki tüm modülleri bilgilendirmek istediğinizi varsayalım. Böylece, ister bir e-posta veya uygulama içi bildirim göndermekle ilgili olsun, isterse bu oturum açma olayına tepki vermek isteyen herhangi bir şey olsun, bu oturum açma olayına tepki vermelerini sağlar.

Olayların ve Dinleyicilerin Temelleri

Bu bölümde, Laravel’in olayları ve dinleyicileri çekirdek çerçevede uygulama yöntemini keşfedeceğiz. Laravel mimarisine aşinaysanız, muhtemelen Laravel’in bir uygulamaya farklı hizmetler enjekte etmenize izin veren bir hizmet sağlayıcı kavramını uyguladığını biliyorsunuzdur.

Benzer şekilde, Laravel yerleşik bir EventServiceProvider.php bir uygulama için olay dinleyici eşlemelerini tanımlamamıza izin veren sınıf.

Devam et ve içeri çek app/Sağlayıcılar/EventServiceProvider.php dosya.

Yakından bir göz atalım $listen bir dizi olayı ve ilişkili dinleyicileri tanımlamanıza izin veren özellik. Dizi anahtarları, bir sistemdeki olaylara karşılık gelir ve değerleri, ilgili olay bir sistemde ortaya çıktığında tetiklenecek olan dinleyicilere karşılık gelir.

Daha fazla göstermek için gerçek dünyadan bir örnek üzerinden gitmeyi tercih ediyorum. Muhtemelen bildiğiniz gibi, Laravel, oturum açma, kayıt olma ve benzeri özellikleri kolaylaştıran yerleşik bir kimlik doğrulama sistemi sağlar.

Birisi uygulamada oturum açtığında, güvenlik önlemi olarak bir e-posta bildirimi göndermek istediğinizi varsayalım. Laravel olay dinleyici özelliğini desteklemiyorsa, çekirdek sınıfı düzenlemeyi veya e-posta gönderen kodunuzu eklemek için başka bir yöntemi kullanmayı bitirmiş olabilirsiniz.

Aslında, Laravel olay dinleyicisini kullanarak bu sorunu çözmenize yardımcı olduğu için daha şanslı taraftasınız. revize edelim app/Sağlayıcılar/EventServiceProvider.php dosya aşağıdaki gibi görünecek.

IlluminateAuthEventsLogin tarafından gündeme getirilecek bir olaydır. Auth Birisi bir uygulamada oturum açtığında eklenti. Biz o olayı bağladık AppListenersSendEmailNotification dinleyici, bu yüzden tetiklenecek login Etkinlik.

Tabii ki, tanımlamanız gerekir AppListenersSendEmailNotification ilk etapta dinleyici sınıfı. Her zaman olduğu gibi, Laravel, aşağıdakileri kullanarak bir dinleyicinin şablon kodunu oluşturmanıza izin verir. artisan emretmek.

Bu komut, altında listelenen olay ve dinleyici sınıflarını oluşturur. $listen Emlak.

Bizim durumumuzda, IlluminateAuthEventsLogin olay zaten var, bu yüzden yalnızca AppListenersSendEmailNotification dinleyici sınıfı Aslında, yaratmış olurdu IlluminateAuthEventsLogin olay sınıfı da ilk etapta olmasaydı.

Şimdi oluşturulan listener sınıfına bir göz atalım. app/Dinleyiciler/SendEmailNotification.php.

Bu handle dinleyici tetiklendiğinde uygun bağımlılıklarla çağrılacak yöntem. Bizim durumumuzda, $event argüman, oturum açma olayıyla ilgili bağlamsal bilgileri, oturum açmış kullanıcı bilgilerini içermelidir.

Ve kullanabiliriz $event içinde daha fazla işlem yapmak için nesne handle yöntem. Bizim durumumuzda, oturum açmış kullanıcıya bir e-posta bildirimi göndermek istiyoruz.

Düzenlenen handle yöntem şöyle görünebilir:

Yani Laravel’deki olaylar özelliğini böyle kullanmanız gerekiyor. Sonraki bölümde, özel bir olay ve ilişkili bir dinleyici sınıfı oluşturacağız.

Özel Etkinlik Oluştur

Örneğimiz için kullanacağımız örnek senaryo şuna benzer:

  • Bir uygulamanın belirli noktalarda sistemdeki önbellekleri temizlemesi gerekir. yükselteceğiz CacheClear Olay, bir uygulama yukarıda belirtilenleri yaptığında bağlamsal bilgilerle birlikte. Temizlenen bir olayla birlikte önbellek grubu anahtarlarını ileteceğiz.
  • Bir sistemdeki diğer modüller şunları dinleyebilir: CacheClear olay ve ilgili önbellekleri ısıtan kodu uygulamak istiyor.

tekrar gözden geçirelim app/Sağlayıcılar/EventServiceProvider.php özel olay ve dinleyici eşlemelerimizi dosyalayın ve kaydedin.

Gördüğünüz gibi, tanımladık AppEventsClearCache olay ve ilişkili dinleyici sınıfı AppListenersWarmUpCache altında $listen Emlak.

Ardından, ilişkili sınıf dosyaları oluşturmamız gerekiyor. her zaman kullanabileceğinizi hatırlayın. artisan bir temel şablon kodu oluşturma komutu.

Bu, olay sınıfını şu adreste yaratmalıydı: app/Events/ClearCache.php ve dinleyici sınıfı app/Dinleyiciler/WarmUpCache.php.

Birkaç değişiklikle, app/Events/ClearCache.php sınıf şöyle görünmelidir:

Muhtemelen fark ettiğiniz gibi, yeni bir mülk ekledik $cache_keys bir olayla birlikte iletilecek bilgileri tutmak için kullanılacaktır. Bizim durumumuzda, temizlenmiş önbellek gruplarını geçeceğiz.

Ardından, dinleyici sınıfına güncellenmiş bir göz atalım. handle yöntem app/Dinleyiciler/WarmUpCache.php.

Dinleyici çağrıldığında, handle yöntem, ilişkili olayın bir örneğiyle iletilir. Bizim durumumuzda, bunun bir örneği olmalıdır. ClearCache ilk argüman olarak iletilecek olan olay sınıfı handle yöntem.

Sonraki, yalnızca her bir önbellek anahtarının yinelenmesi ve ilgili önbelleklerin ısınması meselesidir.

Şimdi, şeyleri test etmek için her şeye sahibiz. Hızlı bir şekilde bir controller dosyası oluşturalım. app/Http/Controllers/EventController.php bir olayı nasıl yükseltebileceğinizi göstermek için.

İlk olarak, örneğini oluştururken ilk argüman olarak bir dizi önbellek anahtarı ilettik. ClearCache Etkinlik.

bu event helper işlevi, bir uygulama içinde herhangi bir yerden bir olay oluşturmak için kullanılır. Olay ortaya çıktığında, Laravel o olayı dinleyen tüm dinleyicileri çağırır.

Bizim durumumuzda, AppListenersWarmUpCache dinleyici dinlemek üzere ayarlanmış AppEventsClearCache Etkinlik. Böylece handle yöntemi AppListenersWarmUpCache olay bir denetleyiciden başlatıldığında dinleyici çağrılır. Gerisi temizlenen önbellekleri ısıtmak!

Böylece uygulamanızda özel olaylar oluşturabilir ve onlarla çalışabilirsiniz.

Etkinlik Abonesi Nedir?

Olay abonesi, tek bir yerde birden fazla olay dinleyicisine abone olmanızı sağlar. Olay dinleyicilerini mantıksal olarak gruplamak veya büyüyen olayları tek bir yerde toplamak istiyorsanız, aradığınız olay abonesidir.

Bu makalede şimdiye kadar tartışılan örnekleri olay abonesini kullanarak uygulasaydık, şöyle görünebilirdi.

Bu subscribe dinleyicileri kaydetmekten sorumlu olan yöntem. İlk argümanı subscribe yöntem bunun bir örneğidir IlluminateEventsDispatcher kullanarak dinleyicilerle olayları bağlamak için kullanabileceğiniz sınıf listen yöntem.

İlk argümanı listen method, dinlemek istediğiniz bir olaydır ve ikinci argüman, olay başlatıldığında çağrılacak bir dinleyicidir.

Bu şekilde, abone sınıfının kendisinde birden çok olay ve dinleyici tanımlayabilirsiniz.

Etkinlik abone sınıfı otomatik olarak alınmaz. adresinden kayıt olmanız gerekmektedir. EventServiceProvider.php altında sınıf $subscribe özellik, aşağıdaki snippet’te gösterildiği gibi.

Bu, hizmetinizde olan olay abone sınıfıydı ve bununla birlikte bu makalenin de sonuna geldik.

Çözüm

Bugün Laravel’in birkaç heyecan verici özelliğinden bahsettik—etkinlikler ve dinleyiciler. Uygulama çapında olayları yükseltmenize ve diğer modüllerin bu olayları dinlemesine ve buna göre tepki vermesine izin veren gözlemci tasarım modeline dayanırlar.

İlgili Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

Başa dön tuşu