Files
michaelschiemer/backups/docs-backup-20250731125004/validation-rules/ulid-validation-example.php
Michael Schiemer 55a330b223 Enable Discovery debug logging for production troubleshooting
- Add DISCOVERY_LOG_LEVEL=debug
- Add DISCOVERY_SHOW_PROGRESS=true
- Temporary changes for debugging InitializerProcessor fixes on production
2025-08-11 20:13:26 +02:00

79 lines
2.3 KiB
PHP

<?php
/**
* ULID Validation Rule - Verwendungsbeispiele
*
* Die ULID Validation Rule verwendet den bestehenden UlidValidator
* für konsistente ULID-Validierung nach dem offiziellen Standard.
*/
declare(strict_types=1);
use App\Framework\Validation\Rules\Ulid;
// Basis ULID-Validierung
class EntityRequest
{
public function __construct(
#[Ulid]
public readonly string $id,
#[Ulid]
public readonly string $parentId,
#[Ulid(message: 'Die Benutzer-ID muss eine gültige ULID sein.')]
public readonly string $userId,
) {}
}
// Verwendungsbeispiele:
// ✅ Gültige ULIDs
$validExamples = [
'id' => '01ARZ3NDEKTSV4RRFFQ69G5FAV',
'parentId' => '01BX5ZZKBKACTAV9WEVGEMMVRY',
'userId' => '01CA2ZZKBKACTAV9WEVGEMMVRY',
];
// ❌ Ungültige ULIDs
$invalidExamples = [
'id' => '01ARZ3NDEKTSV4RRFFQ69G5F', // Zu kurz (25 statt 26 Zeichen)
'parentId' => '01ARZ3NDEKTSV4RRFFQ69G5FAVX', // Zu lang (27 Zeichen)
'userId' => '01ARZ3NDEKTSV4RRFFQ69G5FIV', // Enthält 'I' (nicht erlaubt)
];
/**
* ULID (Universally Unique Lexicographically Sortable Identifier) Standard:
*
* Format: 26 Zeichen in Crockford Base32 Encoding
* - Erste 10 Zeichen: Zeitstempel (48-bit Unix-Zeit in Millisekunden)
* - Letzte 16 Zeichen: Zufälliger Teil (80-bit Entropie)
*
* Erlaubte Zeichen (Crockford Base32):
* 0123456789ABCDEFGHJKMNPQRSTVWXYZ
*
* Nicht erlaubte Zeichen (um Verwechslungen zu vermeiden):
* - I (sieht wie 1 aus)
* - L (sieht wie 1 aus)
* - O (sieht wie 0 aus)
* - U (kann wie V aussehen)
*
* Eigenschaften von ULIDs:
* ✅ Lexikographisch sortierbar (chronologische Ordnung)
* ✅ URL-sicher (keine Sonderzeichen)
* ✅ Case-insensitive (obwohl üblicherweise Großbuchstaben verwendet werden)
* ✅ Monotonisch (innerhalb derselben Millisekunde aufsteigend)
* ✅ Kompakt (26 Zeichen vs. 36 für UUID mit Bindestrichen)
*
* Validierungsregeln:
* - Exakt 26 Zeichen
* - Nur Crockford Base32 Zeichen
* - Keine Leer- oder Sonderzeichen
* - Case-sensitive (üblicherweise Großbuchstaben)
*
* Beispiele für gültige ULIDs:
* - 01ARZ3NDEKTSV4RRFFQ69G5FAV (Standard-Format)
* - 00000000000000000000000000 (Minimum ULID)
* - 7ZZZZZZZZZZZZZZZZZZZZZZZZZ (Maximum timestamp)
* - GGGGGGGGGGGGGGGGGGGGGGGGGG (Alle G's - technisch gültig)
*/