İçeriğe geç →

Laravel Observer Kullanımı

Event Driven Development’ın bir parçası olan Observer Pattern ile Elequent Modellerimizde bir dizi olayları gözlememize olanak sağlar.

Wiki : Observer Pattern yani Gözlemci modeli, özne olarak adlandırılan bir nesnenin bağımlılarının bir listesini tuttuğu, gözlemci olarak adlandırdığı ve genellikle yöntemlerinden birini çağırarak durum değişikliklerini otomatik olarak bildirdiği bir yazılım tasarım desenidir.

Ne gibi amaçlar ile kullanılır ?

Bir Eloquent Modelinde

  • retrieved : Bir kayıt bulunduğunda
  • creating : Bir kayıt oluşturulma esnasında
  • created : Bir kayıt oluşturulduktan sonra
  • updating : Bir kayıt güncellenirken
  • updated : Bir kayıt güncellendikten sonra
  • saving : Bir kayıt güncellenip veya oluşturulmadan önce
  • saved : Bir kayıt güncellenip veya oluşturulduktan sonra.
  • deleting : Bir kayıt soft delete esnasında veya silinirken.
  • deleted : Bir kayıt soft delete esnasında veya silindikten sonra.
  • restoring : Bir soft delete geri alınma esnasında
  • restored : Bir kayıt soft delete’in geri alınmasından sonra

Yukarıdaki gibi tüm eventleri dinleyebilirsiniz.

Örnek senaryo :

Her user kayıt olduğunda ve bunu loglamak istersek observer’ın created methodunda logu çalıştırmamız yeterli olucaktır.Bu nedenle Controller’da log tutmamıza gerek kalmayacaktır.

Örnek senaryo 2 : Makaleler adında bir tablonuz olduğunu varsayalım ve bu makalelerin seo açısından önemli olan sluglarının her defasında controllerde str_slug fonksiyonunu çağırmak yerine saving methodunda başlığı str_slug fonksiyonundan geçirmek yeterli olacaktır.Böylelikle bir makale eklerken veya güncellerken slug fieldi hazır hale gelecektir.

Nasıl Kullanılır ?

php artisan make:observer PostObserver --model=Post

App\Observer Klasörünün altında

namespace App\Observers;

use App\Post;

class PostObserver
{
    /**
     * Handle the post "saving" event.
     *
     * @param  \App\Post  $post
     * @return void
     */
    public function saving(Post $post)
    {
        $post->slug = str_slug($post->title);tlara
    }
}

Böylelikle Post Tabloumuzda bir güncelleme veya kayıt işlenirken makalenin başlığını slug fonksiyonundan geçirerek controllerda fazladan kod yazmamıza gerek kalmayacaktır 🙂

Son olarak Yapmamız gereken Olayları gözlemek için AppServiceProvider’ın boot methodunda modelimizi gözle demek.

AppServiceProvider
namespace App\Providers;

use App\Post;
use App\Observers\PostObserver;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Post::observe(PostObserver::class);
    }
}

Kolaylıklar.

Kategori: php

Yorumlar

Bir cevap yazın

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