Laravel’de Model Eventleri

Laravel’de modellerinizi daha sağlam hale getirip her seferinde aynı işleri yapmaktan kurtulmak istiyorsanız bu eventleri kesinlikle kullanmalısınız.

Ne işe yarar bu eventler? Mesela veritabanındaki görsel tablonuz için bir modeliniz var diyelim, adı da Image olsun. Image modelimizde de görselin yolunu/adını “path” kolonunda tutuyoruz diyelim. Son olarak da her görsel kaydedildiğinde thumbnaillarını kaydetmek istediğimizi düşünelim. Bunu mutatorları kullanarak yapabiliriz. Modelimizde setPathAttribute() metodu oluşturup bu metodun içerisinde thumbnailları oluşturabiliriz. Buraya kadar her şey çok güzel. Peki veritabanından bir görsel sildiğimizde thumbnaillara ne olacak? Ek olarak, görselleri sadece izin verdiğimiz kullanıcıların silmesini istiyorsak her seferinde kullanıcının yetkisi olup olmadığını mı kontrol edeceğiz? İşte bu eventler ile bu anlatılanları model dosyamızın içinden sadece bir kereye mahsus olmak üzere yapabilir ve thumbnailları silmeyi unuttum mu veya yetkileri kontrol ettim mi gibi endişelerinizden kurtulabilirsiniz.

Nasıl kullanılır bu eventlerEventleri modelinizin içerisinden static boot() metodunda kaydetmeniz gerekiyor. boot() metodunu override edeceğimiz için ilk olarak modelin boot() metodunu çağırıyoruz (parent::boot()). Şu an şu durumdayız:

Artık eventleri eklemeye başlayabiliriz. Ekleyebileceğiniz eventler şunlar: creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored. Mesela creating metodunu kullanarak model oluşturulurken (henüz kaydedilmemişken) bir fonksiyon çalıştırabiliriz. Eğer model kaydedildiğinde bir fonksiyon çalıştırmak istiyorsak created metodunu kullanabiliriz. Mesela yeni bir Image instanceı oluşturuyoruz diyelim. Model oluşturulurken otomatik olarak görselin genişlik, yükseklik ve boyutunu kaydedebiliriz. Örneğin:

Aynı şekilde görsel oluşturulduktan sonra thumbnailları kaydedebilir, görsel silindikten sonra da thumbnailları silebiliriz:

Artık yeni bir görsel oluşturmak istediğinizde sadece path değişkenini belirleyip modelin save() metodunu çalıştırmanız yeterli. Görseli silmek istediğinizde de modelin delete() metodunu çalıştırarak geride hiç iz bırakmayacak şekilde görselden kurtulabilirsiniz.

 

Turgut Sarıçam

 

Bir Cevap Yazın

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