Laravel назвал маршрут для контроллера ресурсов
Используя Laravel 4.2, можно ли назначить имя маршруту контроллера ресурсов? Мой маршрут определяется следующим образом:
Route::resource('faq', 'ProductFaqController');
Я попробовал добавить опцию имени на маршрут следующим образом:
Route::resource('faq', 'ProductFaqController', array("as"=>"faq"));
Однако, когда я ударяю маршрут /faq и помещаю {{ Route::currentRouteName() }}
в мой взгляд, он дает faq.faq.index
вместо просто faq
.
Ответы
Ответ 1
Когда вы используете маршрут контроллера ресурсов, он автоматически генерирует имена для каждого отдельного маршрута, который он создает. Route::resource()
- это в основном вспомогательный метод, который затем генерирует для вас отдельные маршруты, а не вам нужно определять каждый маршрут вручную.
Вы можете просмотреть названия маршрутов, созданные путем ввода php artisan routes
в Laravel 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
и т.д.
Ответ 2
Для тех, кто ищет ответы с Laravel 5. 5+ нашел эту страницу:
Route::namespace('Admin')->prefix('admin')->name('admin.')->group(function () {
Route::resource('users','UserController');
});
Эти параметры приведут к следующему для ресурса:
-
namespace()
устанавливает пространство имен контроллера в \Admin\UserController
-
prefix()
устанавливает URi запроса в /admin/users
-
name()
устанавливает route('admin.users.index')
доступа к имени route('admin.users.index')
В name()
подразумевается DOT, это не опечатка.
Пожалуйста, сообщите другим, если это работает в комментариях для любых версий до Laravel 5.5, я обновлю свой ответ.
Обновить:
Я могу подтвердить, что в Laravel 5.3 метод name
недоступен. Пока нет подтверждения, если поддерживается в 5.4
Тейлор принял мой пиар, чтобы официально документировать это в 5.5:
https://laravel.com/docs/5.5/routing#route-group-name-prefixes
Ответ 3
Использование Laravel 5.5
Route :: resource ('gallery', 'GalleryController', ['as' => 'photos']);
важно иметь в виду " ресурс "
Например, я отправляю что-то из моего проекта:
Route::resource('admin/posts/tags', 'PostTagController', ['as' => 'posts']);
Ответ 4
Все обновления позже, чем 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
Ответ 5
Вам не нужно устанавливать имя в ресурсе в Laravel 5.7, который я протестировал.
это автоматически генерирует имя маршрута из URL.
Ответ 6
Я не знаю, доступен ли он в laravel 4.2 (я тестировал в 5.7), но вы можете использовать names
, чтобы изменить имя всех маршрутов, созданных ресурсом
Route::resource('faq', 'ProductFaqController', ['names' => 'something']);
и результат будет таким
something.index
и вам не нужно указывать каждый маршрут