Подтвердить что ты не робот

Laravel назвал маршрут для контроллера ресурсов

Используя Laravel 4.2, можно ли назначить имя маршруту контроллера ресурсов? Мой маршрут определяется следующим образом:

Route::resource('faq', 'ProductFaqController');

Я попробовал добавить опцию имени на маршрут следующим образом:

Route::resource('faq', 'ProductFaqController', array("as"=>"faq"));

Однако, когда я ударяю маршрут /faq и помещаю {{ Route::currentRouteName() }} в мой взгляд, он дает faq.faq.index вместо просто faq.

4b9b3361

Ответ 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

и вам не нужно указывать каждый маршрут