Вы не можете напрямую указывать кастомные хелперы вроде 'username' => 'encrypt_data()' внутри массива $casts в Laravel. Свойство $casts в Laravel принимает только встроенные типы (такие как 'encrypted') или классы, реализующие интерфейс CastsAttributes.
Тем не менее, вы можете добиться нужного результата одним из следующих двух чистых способов:
Способ 1: Использование кастомного класса Cast (рекомендуемый и переиспользуемый)
Вы можете создать кастомный класс Cast для обёртки ваших хелперов:
Создайте класс Cast по пути app/Casts/CustomEncrypt.php :
<?php
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);
}
}
Используйте его в приведении типов внутри Credential.php :
use App\Casts\CustomEncrypt;
protected $casts = [
'username' => CustomEncrypt::class,
'password' => CustomEncrypt::class,
'link' => CustomEncrypt::class,
];
Способ 2: Использование аксессоров и мутаторов Eloquent (без дополнительных файлов)
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),
);
}
Комментарии (0)
Пока нет комментариев — будьте первым.