-
-
Notifications
You must be signed in to change notification settings - Fork 0
Examples
github-actions[bot] edited this page Jul 15, 2026
·
1 revision
Практические сценарии применения пакета. Каждый пример самодостаточен.
use CloudCastle\Uuid\Uuid;
// вставка
$uuid = Uuid::uuid7();
$stmt = $pdo->prepare('INSERT INTO orders (id, total) VALUES (?, ?)');
$stmt->execute([$uuid->toBytes(), 990]);
// чтение
$row = $pdo->query('SELECT id FROM orders ORDER BY id DESC LIMIT 1')->fetch();
$last = Uuid::fromBytes($row['id']);
$last->dateTime()->format('Y-m-d H:i'); // время создания — прямо из ключаuse CloudCastle\Uuid\{Uuid, Ulid};
$uuid = Uuid::uuid7(); // в БД: $uuid->toBytes()
$url = '/orders/' . $uuid->toUlid()->toLower(); // /orders/01aryz6s41…
// обратно из маршрута
$fromUrl = Ulid::fromString($routeParam)->toUuid();use CloudCastle\Uuid\Uuid;
use CloudCastle\Uuid\Exception\InvalidIdentifierException;
try {
$id = Uuid::fromString($request->query('id'));
} catch (InvalidIdentifierException $e) {
// сообщение безопасно для логов: управляющие символы экранированы
$logger->warning('Некорректный идентификатор', ['reason' => $e->getMessage()]);
return new Response(status: 400);
}use CloudCastle\Clock\MockClock;
use CloudCastle\Uuid\UuidFactory;
$clock = MockClock::from('2026-01-01 00:00:00', 'UTC');
$factory = new UuidFactory(clock: $clock);
$order1 = $factory->uuid7(); // всегда одна и та же мс
$clock->advance(60.0);
$order2 = $factory->uuid7(); // ровно +1 минута
self::assertSame(60_000, $order2->timestampMs() - $order1->timestampMs());use CloudCastle\Uuid\{Uuid, UuidNamespace};
// один и тот же URL всегда даёт один и тот же ID — дедупликация без БД
$pageId = Uuid::uuid5(UuidNamespace::Url, 'https://example.com/page?a=1');
// иерархия: приложение → пользователь → сессия
$appNs = Uuid::uuid5(UuidNamespace::Dns, 'my-app.example');
$userId = Uuid::uuid5($appNs, 'user:42');use CloudCastle\Uuid\NanoIdFactory;
$codes = new NanoIdFactory();
$invite = $codes->generateWithAlphabet('23456789ABCDEFGHJKLMNPQRSTUVWXYZ', 8);
// 'K7M2Q9RT' — без похожих символов (0/O, 1/I/L), удобно диктоватьuse CloudCastle\Uuid\SnowflakeFactory;
// каждый узел получает свою пару датацентр/воркер из конфигурации
$factory = new SnowflakeFactory(
datacenterId: (int) getenv('DC_ID'),
workerId: (int) getenv('WORKER_ID'),
);
$id = $factory->generate();
$shard = $id->workerId() % 4; // маршрутизация по создателю
// разбор чужого идентификатора
$parsed = $factory->parse($requestId);
$parsed->dateTime(); // когда созданuse CloudCastle\Uuid\UuidFactory;
$factory = new UuidFactory();
foreach ($legacyRows as $row) {
$uuid = $factory->uuid7(new DateTimeImmutable($row['created_at']));
// сортировка новых ключей совпадает с исторической хронологией
}// строки и байты совместимы в обе стороны
$ours = CloudCastle\Uuid\Uuid::fromString($ramseyUuid->toString());
$ramsey = Ramsey\Uuid\Uuid::fromBytes($ours->toBytes());
$oursFromSymfony = CloudCastle\Uuid\Uuid::fromBase58($symfonyUuid->toBase58());Больше сценариев — в каталоге examples/ репозитория и на страницах
возможностей.
CloudCastle Uuid · · PHP 8.1+
GitHub · Packagist · Releases · Discussions · Issues
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)