Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Laravel: validation, authorization, laravel

Что такое Form Request?

Этот вопрос проверяет понимание механизма Form Request в Laravel и его роли в обработке и валидации входящих HTTP-запросов.

Короткий ответ

Form Request — это специальный класс в Laravel для обработки HTTP-запросов с встроенной валидацией и авторизацией. Он инкапсулирует логику проверки входных данных и определяет правила валидации в отдельном классе, делая контроллеры чище. Form Request автоматически проверяет данные и возвращает ошибки если валидация не пройдена.

Длинный ответ

Form Request — это мощный инструмент в Laravel для централизованной обработки входящих HTTP-запросов, сочетающий в себе валидацию, авторизацию и подготовку данных.

Основные возможности Form Request

Валидация данных

  • Определение правил проверки входных данных

  • Автоматическое перенаправление при ошибках

  • Кастомные сообщения об ошибках

class StoreUserRequest extends FormRequest {
    public function rules() {
        return [
            'name' => 'required|string|max:255',
            'email' => 'required|email|unique:users',
            'password' => 'required|min:8|confirmed',
            'role' => 'sometimes|in:admin,user,moderator',
        ];
    }
    
    public function messages() {
        return [
            'email.unique' => 'Этот email уже занят',
            'password.min' => 'Пароль должен быть не менее 8 символов',
        ];
    }
}

Авторизация запросов

  • Проверка прав доступа пользователя

  • Определение, может ли пользователь выполнить действие

class UpdateUserRequest extends FormRequest {
    public function authorize() {
        // Пользователь может обновлять только свой профиль
        return $this->user()->id === $this->route('user')->id;
    }
    
    public function rules() {
        return [
            'name' => 'sometimes|string|max:255',
            'email' => 'sometimes|email|unique:users,email,' . $this->route('user')->id,
        ];
    }
}

Подготовка данных

  • Нормализация данных перед валидацией

  • Добавление вычисляемых полей

class CreatePostRequest extends FormRequest {
    protected function prepareForValidation() {
        $this->merge([
            'slug' => Str::slug($this->title),
            'user_id' => auth()->id(),
        ]);
    }
    
    public function rules() {
        return [
            'title' => 'required|string|max:255',
            'content' => 'required|string',
            'slug' => 'required|unique:posts',
            'user_id' => 'required|exists:users,id',
        ];
    }
}

Использование в контроллерах

class UserController extends Controller {
    public function store(StoreUserRequest $request) {
        // Данные уже прошли валидацию
        $validated = $request->validated();
        
        $user = User::create($validated);
        
        return response()->json($user, 201);
    }
    
    public function update(UpdateUserRequest $request, User $user) {
        // Авторизация уже проверена
        $validated = $request->validated();
        
        $user->update($validated);
        
        return response()->json($user);
    }
}

Преимущества использования Form Request

Чистота контроллеров

  • Контроллеры освобождаются от логики валидации

  • Упрощается чтение и поддержка кода

Повторное использование

  • Один Form Request может использоваться в нескольких контроллерах

  • Легко модифицировать правила валидации

Тестируемость

  • Form Request легко тестировать изолированно

  • Можно тестировать правила валидации отдельно от бизнес-логики

class StoreUserRequestTest extends TestCase {
    public function test_validation_rules() {
        $request = new StoreUserRequest();
        
        $rules = $request->rules();
        
        $this->assertArrayHasKey('email', $rules);
        $this->assertContains('required', $rules['email']);
        $this->assertContains('email', $rules['email']);
    }
}

Вывод

Form Request — это эффективный способ организовать валидацию и авторизацию в Laravel приложениях, делая код более структурированным, безопасным и легким в поддержке.

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • Laravel

    Laravel

Ключевые слова

#validation

#authorization

#laravel

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.