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