Как называется класс для проверки запроса к endpoint в Laravel?

«Как называется класс для проверки запроса к endpoint в Laravel?» — вопрос из категории Laravel, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Laravel для валидации входящих запросов к endpoint'ам используется специальный класс, называемый Form Request.

Form Request — это кастомный класс, расширяющий IlluminateFoundationHttpFormRequest. Он инкапсулирует логику валидации и авторизации для конкретного запроса.

Как это работает на практике:

  1. Создание Form Request:

    php artisan make:request StorePostRequest

    Эта команда создаст файл app/Http/Requests/StorePostRequest.php.

  2. Настройка класса:

    <?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' => 'Заголовок поста обязателен.',
            ];
        }
    }
  3. Использование в контроллере: Просто укажите тип вашего 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 можно использовать в нескольких методах или контроллерах.
  • Автоматизм: Валидация и возврат ошибок происходят автоматически.