Впровадження власних строкових ідентифікаторів у моделях Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 17 березня, 2025
У статті розглядається, як Laravel спрощує впровадження унікальних рядкових ідентифікаторів у ваших моделях за допомогою рефакторизованого трейту HasUniqueStringIds. Досліджуючи цей підхід, ви дізнаєтеся, як зберегти маршрутизацію та створити індивідуальні формати ідентифікаторів у вашому додатку. Чи готові ви вдосконалити свої моделі в Laravel? Читайте далі

Laravel спрощує впровадження настроюваних рядкових ідентифікаторів у ваших моделях за допомогою доопрацьованого HasUniqueStringIds трейту. Цей підхід зберігає можливості маршрутизації фреймворка, водночас дозволяючи використовувати кастомізовані формати ідентифікаторів.

Базове впровадження передбачає створення власного трейту:

trait HasSecureIdentifiers
{
    use HasUniqueStringIds;

    public function newUniqueId()
    {
        return (string) SecureId::generate();
    }

    protected function isValidUniqueId($value): bool
    {
        return SecureId::validate($value);
    }
}

Ця схема дозволяє гнучко впроваджувати рішення у різних моделях:

class InvoiceIdentifierService
{
    public static function createIdentifier(): string
    {
        $prefix = config('app.env') === 'production' ? 'INV' : 'TEST';
        $timestamp = now()->format('Ymd');
        $random = strtoupper(Str::random(6));

        return "{$prefix}-{$timestamp}-{$random}";
    }

    public static function validateFormat(string $id): bool
    {
        $pattern = '/^(INV|TEST)-\d{8}-[A-Z0-9]{6}$/';
        return preg_match($pattern, $id) === 1;
    }
}

trait HasInvoiceIdentifier
{
    use HasUniqueStringIds;

    public function newUniqueId(): string
    {
        return InvoiceIdentifierService::createIdentifier();
    }

    protected function isValidUniqueId($value): bool
    {
        return InvoiceIdentifierService::validateFormat($value);
    }
}

class Invoice extends Model
{
    use HasInvoiceIdentifier;

    protected $keyType = 'string';
    public $incrementing = false;
}

Трейти HasUniqueStringIds гармонійно поєднуються з маршрутизацією Laravel, що дозволяє зберігати читабельні та зручні URL без втрати функціональності