РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1309 of 1392 menu

Команда make:request

Команда make:request создаёт новый класс запроса в директории app/Http/Requests. Классы запросов служат для централизованной валидации данных, поступающих от клиента. В таком классе можно определить правила валидации, сообщения об ошибках и разрешения на выполнение действия. Это помогает вынести логику проверки из контроллеров, делая код чище и более поддерживаемым.

Команда принимает один обязательный параметр - имя класса запроса. По соглашению имена классов запросов обычно заканчиваются на Request, например, StorePostRequest или UpdateUserRequest. После создания класса вы можете определить в нём методы authorize и rules для управления доступом и правилами валидации соответственно.

Синтаксис

php artisan make:request NameRequest

Пример

Создадим класс запроса для валидации данных при создании новой статьи:

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StorePostRequest extends FormRequest { public function authorize(): bool { return true; } public function rules(): array { return [ 'title' => 'required|string|max:255', 'content' => 'required|string', 'status' => 'sometimes|in:draft,published' ]; } } ?>

Теперь подключим созданный класс в контроллере для автоматической валидации входящего запроса:

<?php namespace App\Http\Controllers; use App\Http\Requests\StorePostRequest; use App\Models\Post; use Illuminate\Http\JsonResponse; class PostController extends Controller { public function store(StorePostRequest $request): JsonResponse { $validated = $request->validated(); $post = Post::create($validated); return response()->json([ 'message' => 'Post created successfully', 'post' => $post ], 201); } } ?>

Пример

Создадим запрос с кастомными сообщениями об ошибках:

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class UpdateUserRequest extends FormRequest { public function authorize(): bool { return $this->user()->id === (int) $this->route('id'); } public function rules(): array { return [ 'name' => 'required|string|max:100', 'email' => 'required|email|unique:users,email,' . $this->route('id'), 'password' => 'nullable|string|min:8|confirmed' ]; } public function messages(): array { return [ 'name.required' => 'The name field is required.', 'email.required' => 'The email address is required.', 'email.email' => 'Please provide a valid email address.', 'email.unique' => 'This email is already taken.', 'password.min' => 'The password must be at least 8 characters.' ]; } } ?>

Используем созданный класс в контроллере с явной проверкой данных:

<?php namespace App\Http\Controllers; use App\Http\Requests\UpdateUserRequest; use App\Models\User; use Illuminate\Http\JsonResponse; class UserController extends Controller { public function update(UpdateUserRequest $request, int $id): JsonResponse { $data = $request->validated(); $user = User::findOrFail($id); $user->update($data); return response()->json([ 'message' => 'User updated successfully', 'user' => $user ]); } } ?>

Пример

Создадим класс запроса с дополнительным методом для подготовки данных перед валидацией:

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class SearchRequest extends FormRequest { public function authorize(): bool { return true; } public function rules(): array { return [ 'query' => 'required|string|min:3|max:50', 'per_page' => 'integer|min:1|max:100' ]; } public function prepareForValidation(): void { $this->merge([ 'query' => trim($this->query) ]); } public function attributes(): array { return [ 'query' => 'search term', 'per_page' => 'items per page' ]; } } ?>

Теперь применим запрос в контроллере для поиска по модели:

<?php namespace App\Http\Controllers; use App\Http\Requests\SearchRequest; use App\Models\Post; use Illuminate\Http\JsonResponse; class SearchController extends Controller { public function search(SearchRequest $request): JsonResponse { $query = $request->input('query'); $perPage = $request->input('per_page', 10); $posts = Post::where('title', 'like', '%' . $query . '%') ->orWhere('content', 'like', '%' . $query . '%') ->paginate($perPage); return response()->json([ 'query' => $query, 'results' => $posts ]); } } ?>

Результат выполнения кода при успешном поиске:

{ "query": "laravel", "results": { "current_page": 1, "data": [ {"id": 1, "title": "Getting started with Laravel"}, {"id": 3, "title": "Advanced Laravel techniques"} ] } }

Смотрите также

  • команда make:controller,
    которая создаёт новый контроллер
  • команда make:model,
    которая создаёт новую модель Eloquent
  • команда make:middleware,
    которая создаёт новый middleware
  • команда make:resource,
    которая создаёт новый класс ресурса API
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить