Перевірка HTTP-методів у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 07 лютого, 2025
Laravel спрощує роботу з HTTP-методами в запитах, що робить обробку різних операцій у ваших додатках легкою та зрозумілою. Досліджуйте, як ефективно використовувати методи method() і isMethod() для створення гнучких контролерів, які адаптуються до типу запиту!

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() забезпечують зручний спосіб реалізації логіки, специфічної для методів, без порушення організації коду