Почему метод Str::ulid() в Laravel всегда возвращает ulid в верхнем регистре?
Я использую Laravel, и когда я получаю результат этого метода:
return (string) Str::ulid();
он возвращает это:
01H32R5Z0NDY1WRYWKWT20ZQYM
Я пытался получить что-то вроде этого:
01gd6r360bp37zj17nxb55yv40
Я бы хотел, чтобы он возвращал сочетание прописных и строчных букв, а не только прописных, это странно, потому что в документации laravel показано сочетание прописных и строчных букв.
1 ответ
ULID не поддерживает смешанный регистр. Вы можете использовать функцию, которая может преобразовать любой регистр в смешанный регистр:
function toMixCase(string $string): string
{
$result = strtolower($string);
$length = strlen($result);
$numberOrUpperSymbols = random_int(0, $length - 1);
for ($i = 0; $i < $numberOrUpperSymbols; $i++) {
$randomIndex = random_int(0, $length - 1);
$result[$randomIndex] = strtoupper($result[$randomIndex]);
}
return $result;
}
$ulid = toMixCase(Str::ulid()->toString());
Или вы просто можете использоватьStr::random(26)
. Это не ULID, но в этом случае вы получите случайную строку со смешанным регистром по умолчанию.