Обробка запитів з використанням PHP Enums у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 04 лютого, 2025
Завдяки новим можливостям Laravel обробка запитів стає набагато простішою завдяки прямій підтримці enum. Читайте далі, щоб дізнатися, як ця функція допомагає забезпечити безпеку типів та узгодженість даних у вашій програмі

Laravel вдосконалює обробку запитів, надаючи підтримку enum, що дозволяє безпечно обробляти перераховані значення з вхідних запитів. Ця функція спрощує валідацію вводів та забезпечує узгодженість даних при роботі з попередньо визначеними наборами значень.

use App\Enums\UserRole;
// Основне отримання enum
$role = $request->enum('role', UserRole::class);

Ось приклад створення системи управління підписками:

// app/Enums/SubscriptionTier.php
<?php

namespace App\Enums;

enum SubscriptionTier: string
{
    case FREE = 'free';
    case BASIC = 'basic';
    case PRO = 'pro';
    case ENTERPRISE = 'enterprise';

    public function getMonthlyLimit(): int
    {
        return match($this) {
            self::FREE => 1000,
            self::BASIC => 5000,
            self::PRO => 20000,
            self::ENTERPRISE => 100000
        };
    }
}

// app/Controllers/AccountController.php
namespace App\Http\Controllers;

use App\Enums\SubscriptionTier;
use App\Models\Account;
use Illuminate\Http\Request;

class AccountController extends Controller
{
    public function updateSubscription(Request $request, Account $account)
    {
        $newTier = $request->enum('tier', SubscriptionTier::class);
        if (!$newTier) {
            return response()->json([
                'error' => 'Неправильний рівень підписки'
            ], 422);
        }
        $account->update([
            'subscription_tier' => $newTier,
            'monthly_limit' => $newTier->getMonthlyLimit(),
            'upgraded_at' => now()
        ]);

        return response()->json([
            'message' => 'Підписку успішно оновлено',
            'account' => $account->fresh()
        ]);
    }
}

Приклад використання:

// Запит на вхід
{
    "tier": "pro"
}

// Успішна відповідь
{
    "message": "Підписку успішно оновлено",
    "account": {
        "id": 1,
        "subscription_tier": "pro",
        "monthly_limit": 20000,
        "upgraded_at": "2024-02-01T10:30:00.000000Z"
    }
}

// Неправильний ввід
{
    "tier": "premium"  // Неіснуюче значення enum
}

// Відповідь з помилкою
{
    "error": "Неправильний рівень підписки"
}

Обробка enum у запитах надає надійний спосіб роботи з перерахованими значеннями, зберігаючи при цьому типову безпеку та цілісність домену