Ответ
В Laravel для валидации входящих запросов к endpoint'ам используется специальный класс, называемый Form Request.
Form Request — это кастомный класс, расширяющий IlluminateFoundationHttpFormRequest. Он инкапсулирует логику валидации и авторизации для конкретного запроса.
Как это работает на практике:
-
Создание Form Request:
php artisan make:request StorePostRequestЭта команда создаст файл
app/Http/Requests/StorePostRequest.php. -
Настройка класса:
<?php namespace AppHttpRequests; use IlluminateFoundationHttpFormRequest; class StorePostRequest extends FormRequest { // Метод определяет, авторизован ли пользователь выполнять этот запрос public function authorize(): bool { // Например, проверяем, может ли пользователь создавать посты return $this->user()->can('create', Post::class); // Или просто возвращаем true для публичных endpoint'ов // return true; } // Метод возвращает массив правил валидации public function rules(): array { return [ 'title' => 'required|string|max:255', 'content' => 'required|string|min:10', 'published_at' => 'nullable|date', 'tags' => 'array', 'tags.*' => 'string|distinct|max:50' ]; } // Опционально: кастомные сообщения об ошибках public function messages(): array { return [ 'title.required' => 'Заголовок поста обязателен.', ]; } } -
Использование в контроллере: Просто укажите тип вашего Form Request в аргументах метода контроллера. Laravel автоматически выполнит валидацию до вызова метода. Если валидация не пройдена, пользователю будет возвращен ответ с ошибками 422.
<?php namespace AppHttpControllers; use AppHttpRequestsStorePostRequest; class PostController extends Controller { public function store(StorePostRequest $request) { // Код выполнится только если запрос прошел авторизацию и валидацию // Валидированные данные уже доступны $validatedData = $request->validated(); // Создание поста... $post = Post::create($validatedData); return response()->json($post, 201); } }
Преимущества Form Request:
- Чистота контроллера: Вся логика валидации и авторизации вынесена в отдельный класс.
- Повторное использование: Один Form Request можно использовать в нескольких методах или контроллерах.
- Автоматизм: Валидация и возврат ошибок происходят автоматически.