Laravel: Переименование имен маршрутов для маршрутов ресурсов

#laravel #laravel-8

Вопрос:

Я хочу использовать другое (множественное число) название модели для названий маршрутов, потому что мой URL-адрес написан на другом языке.

Я могу добиться этого с помощью Restful Именования маршрутов ресурсов

 Route::resource('/foo', BarController::class)->parameters([
    'foo' => 'bar',
])->names([
    'index' => 'bar.index',
    'create' => 'bar.create',
    'store' => 'bar.store',
    'show' => 'bar.show',
    'edit' => 'bar.edit',
    'update' => 'bar.update',
    'destroy' => 'bar.destroy',
]);
 

Но.. Мне пришлось бы делать это для каждого маршрута ресурсов:

 Route::resource('/usuarios', UserController::class)->parameters([
    'usuarios' => 'user',
])->names([
    'index' => 'user.index',
    'create' => 'user.create',
    'store' => 'user.store',
    'show' => 'user.show',
    'edit' => 'user.edit',
    'update' => 'user.update',
    'destroy' => 'user.destroy',
]);
 

Как я мог сделать это СУХИМ?

Ответ №1:

Вы можете извлечь эту часть в функцию.

 function routeNames($model)
{
    return array_map(
        fn ($n) => "{$model}.{$n}",
        ['index', 'create', 'store', 'show', 'edit', 'update', 'destroy']
    );
}


Route::resource('/usuarios', UserController::class)->parameters([
    'usuarios' => 'user',
])->names(routeNames('user'));