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;
use Illuminate\Support\Str;
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', 'PostController@store');
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.

Yorumlar Henüz yorum yapılmamış
Yeni Yorum