Группировка маршрутов

Группировка маршрутов позволяет задать общие атрибуты (такие как middleware, контроллер, префикс и т.д.) для всех маршрутов в группе, без необходимости указывать их для каждого маршрута отдельно.

Вложенные группы поддерживают "объединения" атрибутов со своей родительской группой. Middleware и другие условия объединяются, а имена и префиксы - присоединяются.

Группировка по middleware

Чтобы назначить middleware для всех маршрутов в группе, используйте метод middleware перед определением группы. Middleware будут выполняться в том порядке, в котором они перечислены в массиве:

Route::middleware(['first', 'second'])->group(function () {
    Route::get('/', function () {
        // Uses first & second middleware
    });
 
    Route::get('/user/profile', function () {
        // Uses first & second middleware
    });
});
PHP

Группировка по контроллеру

Если все маршруты должны использовать один контроллер, используйте метод controller перед объявлением группы, чтобы задать единый контроллер.

use App\Http\Controllers\ProductController;

Route::controller(ProductController::class)->group(function () {
    Route::get('/products', 'show');
    Route::post('/products', 'store');
});
PHP

Группировка по домену

Группы маршрутов могут быть привязаны к конкретным доменам или поддоменам с помощью метода domain(). Это полезно для создания мультитенантных приложений или разделения логики по разным доменам.

Домен или поддомен может содержать параметры - так же, как и в URI маршрутах. Это позволяет передавать значения из домена в обработчики маршрутов.

Route::domain('{account}.example.com')->group(function () {
    Route::get('/user/{id}', function ($account, $id) {
        // $account будет содержать значение из поддомена
    });
});
PHP

Регистрацию маршрутов для поддоменов необходимо выполнять до регистрации маршрутов корневого домена.

Группировка по префиксу

Метод prefix() позволяет задать общий префикс URI для всех маршрутов в группе. Например, чтобы все маршруты в группе начинались с /admin, используйте префикс admin:

Route::prefix('admin')->group(function () {
    Route::get('/users', function () {
        // Matches the '/admin/users' URL
    });
    
    Route::get('/news', function () {
        // Matches the '/admin/news' URL
    });
});
PHP

Группировка по имени

Метод name() задаёт префикс имени для всех маршрутов в группе. Например, префикс admin. (с точкой!) будет добавлен к имени каждого маршрута, поэтому важно указать правильно.

Route::name('admin.')->group(function () {
    Route::get('/users', function () {
        // Route assigned name 'admin.users'
    })->name('users');
    
    Route::get('/news', function () {
        // Route assigned name 'admin.news'
    })->name('news');
});
PHP