Правило ulid
Правило ulid используется для проверки, что значение поля
представляет собой корректный ULID-идентификатор. ULID -
это 26-символьный строковый идентификатор, состоящий из
буквенно-цифровых символов (A-Z, a-z, 0-9), который
является лексикографически сортируемым и содержит
метку времени. Это правило доступно в Laravel начиная
с версии 8.x и активно используется для валидации
идентификаторов в API и базах данных.
Правило не принимает дополнительных параметров и просто проверяет, что переданное значение соответствует формату ULID: 26 символов из набора [0-9A-Za-z], где первые 10 символов представляют собой метку времени в миллисекундах с эпохи Unix, а оставшиеся 16 символов - криптографически безопасная случайная часть.
Синтаксис
<?php
use IlluminateValidationRule;
$rules = [
'field' => 'ulid',
];
?>
Альтернативный синтаксис с использованием класса Rule:
<?php
use IlluminateValidationRule;
$rules = [
'field' => Rule::ulid(),
];
?>
Пример с валидацией в контроллере
Давайте провалидируем входящий запрос с полем 'id',
которое должно содержать корректный ULID:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
class UserController extends Controller
{
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'id' => 'required|ulid',
'name' => 'required|string|max:255',
'email' => 'required|email',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
return response()->json(['message' => 'User created successfully'], 201);
}
}
?>
Пример использования в FormRequest
Вот как можно использовать правило ulid в классе
FormRequest для валидации идентификатора модели:
<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
use IlluminateValidationRule;
class UpdatePostRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'id' => ['required', 'ulid'],
'title' => ['required', 'string', 'max:255'],
'content' => ['required', 'string'],
];
}
}
?>
Пример с выводом ошибок валидации
Рассмотрим пример, где поле 'id' не соответствует
формату ULID:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
class ProductController extends Controller
{
public function show(Request $request)
{
$data = [
'id' => 'invalid-ulid-12345',
];
$validator = Validator::make($data, [
'id' => 'required|ulid',
]);
if ($validator->fails()) {
$errors = $validator->errors()->all();
foreach ($errors as $error) {
echo $error;
}
} else {
echo 'ULID is valid';
}
}
}
?>
Результат выполнения кода:
"The id field must be a valid ULID."
Пример с корректным ULID
Теперь передадим правильное значение ULID, сгенерированное с помощью встроенной функции Laravel:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
use IlluminateSupportStr;
class OrderController extends Controller
{
public function store(Request $request)
{
$validUlid = Str::ulid();
$data = [
'order_id' => $validUlid,
'status' => 'pending',
];
$validator = Validator::make($data, [
'order_id' => 'required|ulid',
'status' => 'required|string',
]);
if ($validator->passes()) {
echo 'Validation passed. Order ID: ' . $data['order_id'];
} else {
echo 'Validation failed';
}
}
}
?>
Результат выполнения кода:
"Validation passed. Order ID: 01H2XJ1M4R8Q3Z5T7W9A0B1C2D"