Laravel назвал маршрут для контроллера ресурсов
Используя Laravel 4.2, возможно ли присвоить имя маршруту контроллера ресурса? Мой маршрут определяется следующим образом:
Route::resource('faq', 'ProductFaqController');
Я попытался добавить опцию имени к маршруту следующим образом:
Route::resource('faq', 'ProductFaqController', array("as"=>"faq"));
Тем не менее, когда я попал в /faq маршрут и место {{ Route::currentRouteName() }}
на мой взгляд, это дает faq.faq.index
вместо просто faq
,
12 ответов
Когда вы используете маршрут контроллера ресурса, он автоматически генерирует имена для каждого отдельного маршрута, который он создает. Route::resource()
это в основном вспомогательный метод, который затем генерирует для вас индивидуальные маршруты, а не вам нужно определять каждый маршрут вручную.
Вы можете просмотреть названия маршрутов, набрав, набрав php artisan routes
в Ларавеле 4 или php artisan route:list
в Laravel 5 в ваш терминал / консоль. Вы также можете увидеть типы имен маршрутов, сгенерированных на странице документации контроллера ресурсов ( Laravel 4.x | Laravel 5.x).
Есть два способа изменить имена маршрутов, сгенерированные контроллером ресурсов:
Поставка
names
массив как часть третьего параметра$options
массив, где каждый ключ - это метод контроллера ресурсов (индекс, хранилище, редактирование и т. д.), а значение - имя, которое вы хотите указать для маршрута.Route::resource('faq', 'ProductFaqController', [ 'names' => [ 'index' => 'faq', 'store' => 'faq.new', // etc... ] ]);
Укажите
as
возможность определить префикс для каждого имени маршрута.Route::resource('faq', 'ProductFaqController', [ 'as' => 'prefix' ]);
Это даст вам такие маршруты, как
prefix.faq.index
,prefix.faq.store
, так далее.
Для тех, кто ищет ответы с помощью Laravel 5.5+, которые находят эту страницу:
Route::namespace('Admin')->prefix('admin')->name('admin.')->group(function () {
Route::resource('users','UserController');
});
Эти параметры приведут к следующему для ресурса:
namespace()
устанавливает для пространства имен контроллера значение \Admin\UserControllerprefix()
устанавливает запрос URi для / admin / usersname()
устанавливает для доступа к имени маршрута значениеroute('admin.users.index')
В
name()
ТОЧКА предназначена, это не опечатка.
Пожалуйста, сообщите другим, если это работает в комментариях для любых версий до Laravel 5.5, я обновлю свой ответ.
Обновить:
Я могу подтвердить, что в Laravel 5.3 name
метод недоступен. Пока нет подтверждения, если поддерживается в 5.4
Тейлор принял мой пиар, чтобы официально документировать это в 5.5:
Я не знаю, доступен ли он в laravel 4.2 (я тестировал в 5.7), но вы можете использовать names
изменить название всех маршрутов, генерируемых ресурсом
Route::resource('faq', 'ProductFaqController', ['names' => 'something']);
и результат будет таким
something.index
и вам не нужно указывать каждый маршрут
Все обновления позже, чем Laravel 5.5 Использование
Route::resource('faqs', 'FaqController', ['as' => 'faqs']);
если мы не используем ['as' => 'faqs']
в приведенном выше коде, то он также будет работать так же.
[Обновлено]
Важно иметь в виду, что это будет работать на "ресурс"
Например:
Route::resource('admin/posts/tags', 'PostTagController', ['as' => 'posts']);
и результат будет как
POST | admin/posts/tags | posts.tags.store
GET|HEAD | admin/posts/tags | posts.tags.index
GET|HEAD | admin/posts/tags/create | posts.tags.create
DELETE | admin/posts/tags/{tag} | posts.tags.destroy
PUT|PATCH | admin/posts/tags/{tag} | posts.tags.update
GET|HEAD | admin/posts/tags/{tag} | posts.tags.show
GET|HEAD | admin/posts/tags/{tag}/edit | posts.tags.edit
Протестировано с Laravel 8:
Вы можете определить свое имя для маршрута ресурса как передаваемые имена в качестве необязательных аргументов. Например:
use App\Http\Controllers\UsersController;
Route::resource('reservations', UsersController::class, ['names' => 'users']);
В приведенном выше примере определяются такие маршруты, как
users.index
,
users.store
и т.п.
Вы также можете передать имена маршрутов как:
Route::resource('reservations', UsersController::class, ['names' => 'admin.users']);
который будет определять маршруты с префиксом
admin
такие как
admin.users.index
,
admin.users.store
И в Ларавеле 8
Route::resource('product',
App\Http\Controllers\API\Admin\ProductController::class, [
'names' => [
'index' => 'admin.product.index',
'store' => 'admin.product.store',
'update' => 'admin.product.update',
'destroy' => 'admin.product.delete'
]
])->except(['edit', 'create']);
Использование Laravel 5.5
Route:: resource ('gallery', 'GalleryController', ['as' => 'photos']);
важно иметь в виду "ресурс"
Например, я отправляю что-то из моего проекта:
Route::resource('admin/posts/tags', 'PostTagController', ['as' => 'posts']);
Route::resource('nice-books', BookController::class)->names('books');
В этой строке->names('books')
служит в качествеbooks.
префикс имени для маршрутов ресурсов BookController.
Пример эффекта:route('books.index')
->GET /nice-books
Route::resource('статьи','ArticleController', ['names' => 'xyz'])
Вам не нужно устанавливать имя в ресурсе в Laravel 5.7, который я протестировал. это автоматически генерирует имя маршрута из URL.
Получил ту же ошибку, что и вы. для меня это сработало, добавив весь путь, который является namespace/ControllerName
Route::resource('сотрудники', 'App\Http\Controllers\StaffController');
Вы можете переименовать свой
resource routes
в
AppServiceProvider.php
вот так:
public function boot()
{
Route::resourceVerbs([
'create' => 'neu',
'edit' => 'bearbeiten',
]);
}
Я считаю, что эта функция предназначена для
localization
.