Laravel’de kullanıcı işlemlerini loglamak
Laravel ile geliştirdiğiniz projenizde bazı işlemlerin log’lanmasına ihtiyaç duyabilirsiniz. Kayıt oluşturma, düzenleme, silme gibi işlemlerin hangi kullanıcı tarafından gerçekleştiğini bilmek önemli. Bu işlem için ben activityLog kütüphanesi kullanıyorum. Kullanımı oldukça basit olmasına karşın oldukça iş görüyor. Lafı fazla uzatmadan nasıl kullanıldığına geçmek istiyorum.
activityLog kütüphanesini projenize dahil etmek için, aşağıdaki composer kodunu terminalden çalıştırın.
Laravel 5.8 için
composer require spatie/laravel-activitylog "^3.9"
Laravel 5.8 üzeri için
composer require spatie/laravel-activitylog
Composer sayesinde kurulum yapıldı ve composer.json
güncellendi. Sıra geldi laravel’e tanıtmaya.
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="migrations"
Yukarıdaki artisan kodu sayesinde provider’ı düzenlemiş ve Activitylog için gerekli olan activity_log
tablosunun migration dosyasını hazırlamış olacaksınız.
php artisan migrate
Komutu ile logları tutacağımız activity_log tablosunu oluşturun.
id | Primary Key |
---|---|
log_name | Yapılan Işlem (Created, Updated, Deleted , …) |
description | Url |
subject_id | Işlem Yapılan Verinin Primary Key'i |
subject_type | Işlem Yapılan Model |
causer_id | Işlem Gerçekleştiren User Id |
causer_type | User Model |
properties | Yapılan Işlemin Verisi |
created_at | Oluşturulma Zamanı |
updated_at | Düzenlenme Zamanı |
Sıra geldi event‘lerin takip edileceği observer‘ı hazırlamaya.
php artisan make:observer ActivityLogObserver
Komut sayesinde app/Observers/ActivityLogObserver.php
dosyası oluşturulmuş olacak. Oluşturulan ActivityLogObserver.php
dosyasını aşağıdaki gibi düzenleyin.
namespace App\Observers;
use Illuminate\Support\Facades\Auth;
class ActivityLogObserver
{
protected function log($model, $useLog)
{
$getDirty = $model->getDirty();
unset($getDirty['created_at']);
unset($getDirty['updated_at']);
// unset($getDirty['deleted_at']);
activity()
->performedOn($model)
->causedBy(Auth::user())
->useLog($useLog)
->withProperties($getDirty)
->log(url()->previous());
}
public function created($model)
{
$this->log($model, 'Created');
}
public function updated($model)
{
$this->log($model, 'Updated');
}
public function deleted($model)
{
$this->log($model, 'Deleted');
}
}
Tamamlamak için son bir kaç işlem kaldı. ActivityLogObserver.php
dosyasını tanıttığımız tüm modeller activityLog tarafından log’lanmaya başlar. aşağıdaki modele eklemeniz yeterli olacaktır.
public static function boot()
{
parent::boot();
parent::observe(new ActivityLogObserver);
}
Söz konusu Model’de yapılan created, updated ve deleted işlemleri activity_log tablosuna kaydedilir.
Her model için tek tek uğraşmak yerine BaseModel oluşturup loglama yapılacak modelleri BaseModel‘den extend ederek çalışmakta fayda var. BaseModel oluşturmak için:
php artisan make:model Models/BaseModel
Models/BaseModel.php
dosyasını aşağıdaki gibi düzenleyin.
namespace App\Models;
use App\Observers\ActivityLogObserver;
use Illuminate\Database\Eloquent\Model;
class BaseModel extends Model
{
public static function boot()
{
parent::boot();
parent::observe(new ActivityLogObserver);
}
}
İşlemlerini takip etmek istediğiniz Model’i BaseModel’den extend edin.
class test extends BaseModel
geçmiş olsun 🙂 umarım işinize yaramıştır.
Bigilendirici bilgiler vermişsiniz. Elinize sağlık
Elinize sağlık güzel bir yazı olmuş