Laravel продовжує впроваджувати функціонал enum у PHP, тепер безпосередньо підтримуючи його у визначеннях маршрутів. Це оновлення усуває потребу в явному доступі до значень під час використання enums у маршрутах, що робить код чистішим і легшим для обслуговування, при цьому зберігаючи типову безпеку.
Тепер, працюючи з іменами маршрутів або доменами, ви можете передавати enum case безпосередньо в методи маршрутизації Laravel, спростивши визначення маршрутів без втрати переваг перевірки типу enums.
enum RouteSection: string
{
case Admin = 'admin';
case Client = 'client';
case Public = 'public';
}
Route::prefix(RouteSection::Admin)
->group(function () {
// Маршрути для адміністратора
});
Розглянемо практичний приклад організації маршрутів у багатопортальному додатку:
<?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::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 () {
// Маршрути для порталу факультету, використовуючи ті ж enums
Route::get('/', [Portal\FacultyController::class, 'index'])
->name(PortalSection::Dashboard);
});
Підтримка enum у визначеннях маршрутів покращує читабельність коду, зберігаючи переваги типового контролю та автозаповнення, які надають enums у PHP.