Laravel’da, özel yardımcı işlevleri doğrudan $casts dizisinde belirtmek mümkün değildir. Laravel’ın $casts özelliği yalnızca yerel türleri (örneğin, ‘encrypted’) veya CastsAttributes arayüzünü uygulayan sınıfları kabul eder.
Ancak, istediğinizi aşağıdaki iki temiz yöntemle gerçekleştirebilirsiniz:
Yöntem 1: Özel Bir Cast Sınıfı Kullanma (Tavsiye Edilir & Yeniden Kullanılabilir)
Özel bir Cast sınıfı oluşturarak yardımcı işlevlerinizi sarmalayabilirsiniz:
Cast sınıfını app/Casts/CustomEncrypt.php konumunda oluşturun:
namespace App\Casts;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Database\Eloquent\Model;
class CustomEncrypt implements CastsAttributes
{
public function get(Model $model, string $key, mixed $value, array $attributes): mixed
{
return decrypt_data($value);
}
public function set(Model $model, string $key, mixed $value, array $attributes): mixed
{
return encrypt_data($value);
}
}
Bunu kendi casts’larınızda Credential.php içinde kullanın:
use App\Casts\CustomEncrypt;
protected $casts = [
'username' => CustomEncrypt::class,
'password' => CustomEncrypt::class,
'link' => CustomEncrypt::class,
];
Yöntem 2: Eloquent Accessors ve Mutators Kullanma (Ekstra dosya yok)
use Illuminate\Database\Eloquent\Casts\Attribute;
protected function username(): Attribute
{
return Attribute::make(
get: fn ($value) => decrypt_data($value),
set: fn ($value) => encrypt_data($value),
);
}
protected function password(): Attribute
{
return Attribute::make(
get: fn ($value) => decrypt_data($value),
set: fn ($value) => encrypt_data($value),
);
}
protected function link(): Attribute
{
return Attribute::make(
get: fn ($value) => decrypt_data($value),
set: fn ($value) => encrypt_data($value),
);
}
Kaynak: Orijinal Makale


