Покращення визначення маршрутів у Laravel з інтеграцією Enum

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

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.