- Add DISCOVERY_LOG_LEVEL=debug - Add DISCOVERY_SHOW_PROGRESS=true - Temporary changes for debugging InitializerProcessor fixes on production
79 lines
2.3 KiB
PHP
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)
|
|
*/ |