Bir Trait, bir sınıfın yapabileceği işlevselliği tanımlayan bir grup özellik ve yöntemler kümesidir. Laravel Trait'leri, sınıflar arasında davranışları paylaşmak için kullanılır ve bir sınıfın birden fazla Trait içerebilir.

Bir Trait, bir sınıfın özellikleri ve yöntemleriyle aynı şekilde tanımlanır, ancak Trait, bağımsız bir sınıf değildir ve kendisi örneklenemez. Trait, bir sınıfa aktarılabilir (use edilebilir) ve Trait içinde tanımlanan özellikler ve yöntemler, sınıfın özellikleri ve yöntemleriyle aynı şekilde kullanılabilir. Bir sınıf, bir Trait kullanarak, Trait içinde tanımlanan özellikleri ve yöntemleri kullanabilir ve bu şekilde kod tekrarından kaçınabilir.

Laravel Trait'leri, kodun yeniden kullanımını artırırken, kod tekrarından kaçınmayı sağlar ve kodun okunabilirliğini artırır. Laravel'da, Trait'ler genellikle bir sınıfın tekrarlanan özellikleri için kullanılır ve bu şekilde kod tekrarından kaçınılır.

Şimdi basit bir Trait uygulamasının nasıl olduğunu görelim;

<?php

namespace App\Traits;

trait SoftDeletes
{
    protected $deleted_at = null;

    public function delete()
    {
        $this->deleted_at = date('Y-m-d H:i:s');
        $this->save();
    }

    public function restore()
    {
        $this->deleted_at = null;
        $this->save();
    }

    public function forceDelete()
    {
        $this->delete();
        $this->forceDelete();
    }

    public function getDeletedAtAttribute($value)
    {
        return $value ? date('Y-m-d H:i:s', strtotime($value)) : null;
    }

    public function scopeDeleted($query)
    {
        return $query->whereNotNull('deleted_at');
    }
}

 

Bu Trait, "soft deletes" özelliğini uygulamak için kullanılabilir. Bu Trait, "deleted_at" adlı bir özellik içerir ve "delete", "restore" ve "forceDelete" adlı üç yöntemi tanımlar. "deleted_at" özelliği, bir kaydın silinip silinmediğini gösterir. "delete" yöntemi, bir kaydı "silinmiş" olarak işaretlemek için "deleted_at" özelliğini ayarlar. "restore" yöntemi, "delete" yöntemiyle silinmiş bir kaydı geri yükler. "forceDelete" yöntemi, silinmiş bir kaydı tamamen veritabanından kaldırır. "getDeletedAtAttribute" yöntemi, "deleted_at" özelliğini biçimlendirir ve "scopeDeleted" yöntemi, silinmiş kayıtları sorgulamak için kullanılabilir.

Bu Trait'i bir model sınıfında kullanmak için aşağıdaki gibi "use" anahtar kelimesiyle Trait'i belirtmeniz yeterlidir:

<?php

namespace App\Models;

use App\Traits\SoftDeletes;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use SoftDeletes;

    // ...
}

 

Bu örnekte "Post" model sınıfı, "SoftDeletes" Trait'ini kullanarak "soft deletes" özelliğini uygulamak için hazırlanmıştır.

Daha spesifik ve kullanışlı örneklerle Laravel-Trait kütüphanelerimizi geliştireceğiz, takipte kalın.