Урок 05

Группы роутов

Группа применяет общие настройки к нескольким роутам. Это избавляет от дублирования: префикс, middleware, имя, домен задаются один раз.

Префикс

Route::prefix('admin')->group(function () {
    Route::get('/users', fn () => 'Users');
    Route::get('/posts', fn () => 'Posts');
});

Оба роута получат URL /admin/users и /admin/posts.

Middleware

Route::middleware(['auth', 'verified'])->group(function () {
    Route::get('/dashboard', fn () => 'Dashboard');
    Route::get('/profile', fn () => 'Profile');
});

Все роуты в группе требуют аутентификации и подтверждённого email.

Комбинация

Route::middleware('auth')
    ->prefix('admin')
    ->name('admin.')
    ->group(function () {
        Route::get('/users', fn () => 'Users')->name('users');
        Route::get('/posts', fn () => 'Posts')->name('posts');
    });

Домен и поддомен

Route::domain('admin.example.com')->group(function () {
    Route::get('/users', fn () => 'Users');
});

Динамический поддомен:

Route::domain('{account}.example.com')->group(function () {
    Route::get('/dashboard', function ($account) {
        return "Account: {$account}";
    });
});

Вложенные группы

Route::prefix('api')->group(function () {
    Route::prefix('v1')->group(function () {
        Route::get('/users', fn () => 'API v1 Users');
    });
});

Файлы роутов

Если роутов много — их выносят в отдельные файлы. Регистрация в bootstrap/app.php:

->withRouting(
    web: __DIR__.'/../routes/web.php',
    api: __DIR__.'/../routes/api.php',
    commands: __DIR__.'/../routes/console.php',
    health: '/up',
    then: function () {
        Route::middleware('web')
            ->prefix('admin')
            ->group(base_path('routes/admin.php'));
    },
)

Просмотр

php artisan route:list --path=admin
php artisan route:list --middleware=auth