Метод prefix
Метод prefix применяется к группе маршрутов
и добавляет указанный префикс ко всем URL-адресам
внутри группы. Первым параметром передаётся строка
префикса, которую необходимо добавить к каждому
маршруту в группе.
Синтаксис
<?php
Route::prefix($prefix)->group(function () {
// Маршруты внутри группы
});
?>
Пример
Давайте создадим группу маршрутов для административной
панели с префиксом 'admin':
<?php
use AppHttpControllersAdminDashboardController;
use AppHttpControllersAdminUsersController;
use AppHttpControllersAdminSettingsController;
use IlluminateSupportFacadesRoute;
Route::prefix('admin')->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index']);
Route::get('/users', [UsersController::class, 'index']);
Route::get('/settings', [SettingsController::class, 'index']);
});
?>
В результате все маршруты будут доступны по следующим URL-адресам:
"/admin/dashboard"
"/admin/users"
"/admin/settings"
Пример
Давайте объединим префикс с другими методами
группировки, такими как middleware и name,
для организации API версии 1:
<?php
use AppHttpControllersApiV1ProductController;
use AppHttpControllersApiV1OrderController;
use AppHttpControllersApiV1UserController;
use IlluminateSupportFacadesRoute;
Route::prefix('api/v1')
->middleware('auth:sanctum')
->name('api.v1.')
->group(function () {
Route::get('/products', [ProductController::class, 'index'])
->name('products.index');
Route::get('/orders', [OrderController::class, 'index'])
->name('orders.index');
Route::get('/users', [UserController::class, 'index'])
->name('users.index');
});
?>
Теперь маршруты доступны по URL-адресам с префиксом
'api/v1' и имеют имена с префиксом 'api.v1.':
"/api/v1/products" -> имя маршрута "api.v1.products.index"
"/api/v1/orders" -> имя маршрута "api.v1.orders.index"
"/api/v1/users" -> имя маршрута "api.v1.users.index"
Пример
Давайте создадим вложенные группы с разными префиксами для организации модульной структуры приложения:
<?php
use AppHttpControllersBlogPostController;
use AppHttpControllersBlogCategoryController;
use AppHttpControllersBlogCommentController;
use IlluminateSupportFacadesRoute;
Route::prefix('blog')->group(function () {
Route::prefix('posts')->group(function () {
Route::get('/', [PostController::class, 'index']);
Route::get('/{id}', [PostController::class, 'show']);
});
Route::prefix('categories')->group(function () {
Route::get('/', [CategoryController::class, 'index']);
Route::get('/{id}', [CategoryController::class, 'show']);
});
Route::prefix('comments')->group(function () {
Route::get('/post/{postId}', [CommentController::class, 'index']);
Route::post('/post/{postId}', [CommentController::class, 'store']);
});
});
?>
Результат выполнения кода - все маршруты сгруппированы по логическим блокам:
"/blog/posts"
"/blog/posts/{id}"
"/blog/categories"
"/blog/categories/{id}"
"/blog/comments/post/{postId}"
Смотрите также
-
метод
group,
который создаёт группу маршрутов -
метод
name,
который задаёт имя маршрута -
метод
middleware,
который добавляет посредников к группе маршрутов -
метод
domain,
который ограничивает маршруты по поддомену