Этот вопрос проверяет знание базовой структуры Laravel и понимание иерархии классов в фреймворке, конкретно для механизма Form Request.
Form Request в Laravel наследуется от класса Illuminate\Foundation\Http\FormRequest. Этот базовый класс предоставляет всю необходимую функциональность для валидации, авторизации и обработки HTTP-запросов. Form Request автоматически разрешается через Service Container Laravel.
Form Request классы в Laravel имеют четкую иерархию наследования, которая обеспечивает их функциональность.
Illuminate\Foundation\Http\FormRequest
↑
Illuminate\Http\Request
↑
Symfony\Component\HttpFoundation\RequestЭтот класс предоставляет основную функциональность для Form Request:
<?php
namespace Illuminate\Foundation\Http;
use Illuminate\Http\Request;
class FormRequest extends Request
{
use ValidatesRequests;
// Основные методы, которые можно переопределять
public function authorize() {}
public function rules() {}
public function messages() {}
public function attributes() {}
protected function prepareForValidation() {}
}<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class CreateUserRequest extends FormRequest
{
/**
* Определяет, авторизован ли пользователь для выполнения запроса
*/
public function authorize(): bool
{
return true; // или ваша логика авторизации
}
/**
* Возвращает правила валидации
*/
public function rules(): array
{
return [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
];
}
}Определяет, имеет ли пользователь право на выполнение запроса
Возвращает boolean
Возвращает массив правил валидации
Выполняется только если authorize() вернул true
Кастомные сообщения об ошибках валидации
Необязательный метод
Кастомные имена для атрибутов в сообщениях об ошибках
Необязательный метод
Form Request автоматически разрешается через Service Container:
php
// Laravel автоматически инжектит Form Request
public function store(CreateUserRequest $request)
{
// $request уже прошел валидацию и авторизацию
$validated = $request->validated();
}Можно создавать базовые Form Request классы для повторного использования:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
abstract class BaseFormRequest extends FormRequest
{
/**
* Общие правила для всех запросов
*/
public function commonRules(): array
{
return [
// общие правила
];
}
/**
* Базовая авторизация
*/
public function authorize(): bool
{
return auth()->check();
}
}
// Использование в конкретном Request
class CreatePostRequest extends BaseFormRequest
{
public function rules(): array
{
return array_merge($this->commonRules(), [
'title' => 'required|string|max:255',
'content' => 'required|string',
]);
}
}Form Request наследуется от Illuminate\Foundation\Http\FormRequest, который предоставляет весь необходимый функционал для валидации и авторизации HTTP-запросов в Laravel приложениях.