Laravel Tutorials

Route Definition Enhancements in Laravel with Enum Integration

Published
Route Definition Enhancements in Laravel with Enum Integration image

Laravel continues to embrace PHP's enum functionality, now extending support directly to route definitions. This update eliminates the need for explicit value access when using enums in routes, resulting in cleaner, more maintainable code while preserving type safety.

When working with route names or domains, you can now pass enum cases directly to Laravel's routing methods, streamlining your route definitions without sacrificing the benefits of enum type checking.

enum RouteSection: string
{
case Admin = 'admin';
case Client = 'client';
case Public = 'public';
}
 
Route::prefix(RouteSection::Admin)
->group(function () {
// Admin routes
});

Let's explore a practical example of organizing routes in a multi-portal application:

<?php
 
namespace App\Routing;
 
use App\Http\Controllers\Portal;
 
enum PortalType: string
{
case Student = 'student.university.edu';
case Faculty = 'faculty.university.edu';
case Admin = 'admin.university.edu';
}
 
enum PortalSection: string
{
case Dashboard = 'dashboard';
case Resources = 'resources';
case Profile = 'profile';
}
 
// Route configuration
Route::domain(PortalType::Student)
->middleware(['auth', 'student'])
->group(function () {
Route::get('/', [Portal\StudentController::class, 'index'])
->name(PortalSection::Dashboard);
 
Route::get('/materials', [Portal\ResourceController::class, 'index'])
->name(PortalSection::Resources);
 
Route::get('/profile', [Portal\ProfileController::class, 'show'])
->name(PortalSection::Profile);
});
 
Route::domain(PortalType::Faculty)
->middleware(['auth', 'faculty'])
->group(function () {
// Faculty portal routes using the same enums
Route::get('/', [Portal\FacultyController::class, 'index'])
->name(PortalSection::Dashboard);
});

This direct enum support in route definitions improves code readability while maintaining the type safety and autocompletion benefits of PHP enums.

Harris Raftopoulos photo

Senior Software Engineer • Staff & Educator @ Laravel News • Co-organizer @ Laravel Greece Meetup

Sponsored

masteringlaravel logo
Laravel Code Review

Get expert guidance in a few days with a Laravel code review

Visit Laravel Code Review

The latest

View all →
Laravel Truss: Live Interactive Database ER Diagrams image

Laravel Truss: Live Interactive Database ER Diagrams

Read article
Laravel artisan dev: Run Server, Queue, Logs, and Vite image

Laravel artisan dev: Run Server, Queue, Logs, and Vite

Read article
Validate and Convert HEIC Images in Laravel image

Validate and Convert HEIC Images in Laravel

Read article
Saga Lara Flow: Durable Workflows and Compensating Transactions on Laravel Queues image

Saga Lara Flow: Durable Workflows and Compensating Transactions on Laravel Queues

Read article
Reject Unexpected Array Keys with Laravel Validation image

Reject Unexpected Array Keys with Laravel Validation

Read article
Major performance improvements & security patches for Filament v4.12 and v5.7! image

Major performance improvements & security patches for Filament v4.12 and v5.7!

Read article