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