Laravel пропонує зручні методи для роботи з HTTP-методами вхідних запитів, що спрощує виконання різних операцій у ваших додатках. Методи method() та isMethod() дозволяють легко визначати та перевіряти типи запитів
Ця функціональність особливо важлива при створенні RESTful API або обробці складних форм, де різні HTTP-методи викликають різну бізнес-логіку. Вона корисна для створення універсальних контролерів, які можуть адаптувати свою поведінку в залежності від типу вхідного запиту
// Основна перевірка методу
$method = $request->method(); // Повертає 'GET', 'POST' тощо
if ($request->isMethod('post')) {
// Обробка POST-запиту
}
Ось приклад гнучкого обробника ресурсів:
<?php
namespace App\Http\Controllers;
use App\Models\Resource;
use Illuminate\Http\Request;
class ResourceController extends Controller
{
public function handle(Request $request, $id = null)
{
return match($request->method()) {
'GET' => $this->handleGet($id),
'POST' => $this->handleCreate($request),
'PUT' => $this->handleUpdate($request, $id),
'DELETE' => $this->handleDelete($id),
default => response()->json(['error' => 'Метод не дозволений'], 405)
};
}
private function handleGet($id = null)
{
return $id
? Resource::with('metadata')->findOrFail($id)
: Resource::with('metadata')->latest()->paginate(20);
}
private function handleCreate(Request $request)
{
$resource = Resource::create($request->validated());
return response()->json([
'message' => 'Ресурс успішно створено',
'resource' => $resource->load('metadata')
], 201);
}
private function handleUpdate(Request $request, $id)
{
$resource = Resource::findOrFail($id);
$resource->update($request->validated());
return response()->json([
'message' => 'Ресурс успішно оновлено',
'resource' => $resource->fresh()->load('metadata')
]);
}
private function handleDelete($id)
{
Resource::findOrFail($id)->delete();
return response()->json(null, 204);
}
}
Приклади взаємодії:
// GET /api/resources/1
{
"id": 1,
"name": "Приклад ресурсу",
"status": "активний",
"metadata": {
"created_by": "john@example.com",
"last_accessed": "2024-02-01T10:30:00Z"
}
}
// PUT /api/resources/1 з недозволеним методом
{
"error": "Метод не дозволений"
}
Методи method() та isMethod() забезпечують зручний спосіб реалізації логіки, специфічної для методів, без порушення організації коду