Laravel'de Observer kullanımı

Merhaba,


Bu yazıda Laravel'de Observer kullanımından bahsedeceğim. Observer adı üstünde gözlemleme işlemi yapmaktadır. Yani mesela bir veri kaydedilirken/kaydedildiğinde, silinirken/silindiğinde bu durumu gözleyip o esnada başka bir işlem daha yaptırmak istediğimiz zaman Observer kullanabiliriz. Şimdi daha iyi anlaşılması adına bir örnek üzerinden gidelim;


Veritabanında posts adında bir tablomuz olsun. Bu tabloyu oluşturmak adına bir migration tanımlaması yapalım:

php artisan make:migration create_posts_table

Migration içeriği:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePostsTable extends Migration
{
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title');
            $table->string('slug');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('posts');
    }
}


Post adında bir model dosyası oluşturalım:

php artisan make:model Post

Model içeriği:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $table = 'posts';

    protected $fillable = ['title', 'slug'];
}


Şimdi de observer tanımlaması yapalım:

php artisan make:observer PostObserver --model=Post

Observer içeriği:

<?php

namespace App\Observers;

use App\Post;

class PostObserver
{
    public function saving(Post $post)
    {
        $post->slug = str_slug($post->title);
    }
}

Burada saving fonksiyonu ile Post verisi kaydedilirken (kayıt işlemi öncesinde) slug değerinin ne olacağını belirttik.


Observer tanımlamamızın çalışması için AppServiceProvider dosyasında çağırmamız gerekiyor.

app/Providers/AppServiceProvider.php:

<?php

namespace App\Providers;

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

class AppServiceProvider extends ServiceProvider
{
    public function register()
    {
        //
    }

    public function boot()
    {
        Schema::defaultStringLength(191);
        Post::observe(PostObserver::class);
    }
}


Artık observer hazır. İşlemi test edebiliriz.


Veritabanında tablomuzun oluşması için komutumuzu yazıyoruz:

php artisan migrate


routes/api.php dosyasını açarak bir route tanımlaması yapıyoruz:

Route::post('post', '[email protected]');


Controller dosyasını oluşturuyoruz:

php artisan make:controller PostController

PostController içeriği:

<?php

namespace App\Http\Controllers;

use App\Post;

class PostController extends Controller
{
    public function store()
    {
        Post::create(request()->all());
        return response()->json(['message' => 'Veri kaydedildi.'], 200);
    }
}


Postman üzerinden testimizi gerçekleştiriyoruz:

Ve sonuç:


Umarım yararlı olmuştur.


İyi çalışmalar.

Yusuf Borucu

Benim adım Yusuf. 1993 yılında Şanlıurfa'da doğdum. 2015 yılında Bilecik Şeyh Edebali Üniversitesi'nde Bilgisayar Mühendisliği bölümünden mezun oldum. Şu anda özel bir şirkette Yazılım Geliştirici olarak çalışmaktayım. Yazılıma yönelik uğraştığım, sevdiğim ve ilgi duyduğum teknolojilerden bahsetmem gerekirse; Laravel, MySQL (mevcut çalıştığım şirkette uğraştıklarım). Asp.Net Mvc, MSSQL (önceden ça...

"Laravel'de Observer kullanımı" için hiç yorum yapılmadı.

Henüz yorum yapılmamış.

Yorum yap * E-posta adresiniz yayınlanmayacak.