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 без втрати функціональності