Request Handling with PHP Enums in Laravel

Explanation:

Laravel enhances its request handling capabilities with direct enum support, enabling type-safe processing of enumerated values from incoming requests. This feature simplifies input validation and ensures data consistency when working with predefined sets of values.


Code:

use App\Enums\UserRole;
// Basic enum retrieval
$role = $request->enum('role', UserRole::class);

Here's an example of building a subscription management system:

// 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' => 'Invalid subscription tier provided'
            ], 422);
        }
        $account->update([
            'subscription_tier' => $newTier,
            'monthly_limit' => $newTier->getMonthlyLimit(),
            'upgraded_at' => now()
        ]);
 
        return response()->json([
            'message' => 'Subscription updated successfully',
            'account' => $account->fresh()
        ]);
    }
}

Example usage:

// Input request
{
    "tier": "pro"
}
 
// Success response
{
    "message": "Subscription updated successfully",
    "account": {
        "id": 1,
        "subscription_tier": "pro",
        "monthly_limit": 20000,
        "upgraded_at": "2024-02-01T10:30:00.000000Z"
    }
}
 
// Invalid input
{
    "tier": "premium"  // Non-existent enum value
}
 
// Error response
{
    "error": "Invalid subscription tier provided"
}

Request enum handling provides a robust way to process enumerated values while maintaining type safety and domain integrity.

Comments :

Bradley Nelson Date: 1/3/2025

Pellentesque ut leo sit amet justo auctor porttitor a nec risus. Proin tincidunt consectetur augue id ornare. Morbi arcu dui, suscipit at nunc sit amet