Правило uuid
Правило uuid используется для валидации полей формы,
которые должны содержать корректный UUID версии 4.
Это правило проверяет, что значение является строкой
в формате xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,
где каждый x - это шестнадцатеричная цифра.
Особенно полезно при работе с внешними ключами,
которые используют UUID вместо автоинкрементных идентификаторов.
Синтаксис
<?php
use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\Validator;
// В массиве правил
'field' => 'uuid'
// Или с использованием Rule
'field' => Rule::uuid()
?>
Пример использования в контроллере
Давайте проверим, что переданный идентификатор является корректным UUID:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class ArticleController extends Controller
{
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'user_id' => 'required|uuid',
'title' => 'required|string|max:255',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
// Валидация прошла успешно
// $validated = $validator->validated();
return response()->json(['message' => 'Article created']);
}
}
?>
Пример использования с FormRequest
Более элегантный способ организации валидации - использование отдельного класса FormRequest:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreArticleRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'user_id' => 'required|uuid|exists:users,id',
'category_id' => 'nullable|uuid',
'title' => 'required|string|max:255',
'content' => 'required|string',
];
}
}
?>
Пример с пользовательским сообщением об ошибке
Вы можете настроить сообщение об ошибке для правила
с помощью метода messages:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateArticleRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'id' => 'required|uuid',
'title' => 'string|max:255',
'content' => 'string',
];
}
public function messages()
{
return [
'id.uuid' => 'Идентификатор должен быть в формате UUID',
'id.required' => 'Идентификатор обязателен для заполнения',
];
}
}
?>
Пример валидации массива UUID
Правило uuid можно комбинировать с правилом array
для проверки списка идентификаторов:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class PostController extends Controller
{
public function syncCategories(Request $request)
{
$validator = Validator::make($request->all(), [
'post_id' => 'required|uuid',
'categories' => 'required|array',
'categories.*' => 'required|uuid|exists:categories,id',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
$validated = $validator->validated();
return response()->json(['message' => 'Categories synced']);
}
}
?>
Результат выполнения кода при успешной валидации:
{"message": "Categories synced"}
Результат выполнения кода при ошибке валидации:
{"categories.0": ["The categories.0 field must be a valid UUID."]}