web-dev-qa-db-fra.com

Laravel nommé route pour le contrôleur de ressources

Avec Laravel 4.2, est-il possible d’attribuer un nom à une route de contrôleur de ressources? Mon itinéraire est défini comme suit:

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

J'ai essayé d'ajouter une option de nom à l'itinéraire comme ceci:

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

Cependant, lorsque je clique sur la route/faq et que je place {{ Route::currentRouteName() }} à mon avis, il génère faq.faq.index au lieu de faq.

38
flyingL123

Lorsque vous utilisez un itinéraire de contrôleur de ressources, il génère automatiquement des noms pour chaque itinéraire qu'il crée. Route::resource() est fondamentalement une méthode d'assistance qui génère ensuite des itinéraires individuels pour vous, plutôt que de devoir définir chaque itinéraire manuellement.

Vous pouvez afficher les noms de route générés en tapant php artisan routes dans Laravel 4 ou php artisan route:list dans Laravel 5 dans votre terminal/console. Vous pouvez également voir les types de noms de route générés sur la page Documents du contrôleur de ressources ( Laravel 4.x | Laravel 5.x ).

Vous pouvez modifier les noms de route générés par un contrôleur de ressources de deux manières:

  1. Fournissez un tableau names dans le cadre du troisième paramètre $options, chaque clé représentant la méthode du contrôleur de ressources (index, magasin, édition, etc.) et la valeur correspondant au nom que vous souhaitez donner à la route.

    Route::resource('faq', 'ProductFaqController', [
        'names' => [
            'index' => 'faq',
            'store' => 'faq.new',
            // etc...
        ]
    ]);
    
  2. Spécifiez l'option as pour définir un préfixe pour chaque nom de route.

    Route::resource('faq', 'ProductFaqController', [
        'as' => 'prefix'
    ]);
    

    Cela vous donnera des itinéraires tels que prefix.faq.index, prefix.faq.store, etc.

117
Aken Roberts

Pour les demandeurs de réponse avec Laravel 5.5+, trouver cette page:

Route::namespace('Admin')->prefix('admin')->name('admin.')->group(function () {

    Route::resource('users','UserController');

});

Ces options donneront les résultats suivants pour le Ressource:

  • namespace() définit l'espace de noms du contrôleur sur\Admin\UserController

  • prefix() définit la requête URi à/admin/users

  • name() définit l'accesseur de nom de route sur route('admin.users.index')

Dans name() le DOT est prévu, ce n'est pas une faute de frappe.

S'il vous plaît laissez les autres savoir si cela fonctionne dans les commentaires pour les versions antérieures à Laravel 5.5, je mettrai à jour ma réponse.

Mettre à jour:

Je peux confirmer que, dans Laravel 5.3, la méthode name n'est pas disponible . Aucune confirmation si elle est prise en charge dans 5.4

Taylor a accepté que mes relations publiques documentent officiellement ceci en 5.5:

https://laravel.com/docs/5.5/routing#route-group-name-prefixes

10
Marc Newton

Utiliser Laravel 5.5

Route :: resource ('galerie', 'GalleryController', ['as' => 'photos']);

important de garder à l'esprit le " ressource "

Par exemple, j'envoie quelque chose de mon projet:

Route::resource('admin/posts/tags', 'PostTagController', ['as' => 'posts']);
4
Brayan Angarita

Toutes les mises à jour plus tard, puis Laravel 5.5 avec

Route::resource('faqs', 'FaqController', ['as' => 'faqs']);

si nous n'utilisons pas ['as' => 'faqs'] dans le code ci-dessus, cela fonctionnera également.

[Mis à jour]

Il est important de garder à l’esprit que cela fonctionnera pour " ressource "

Par exemple:

Route::resource('admin/posts/tags', 'PostTagController', ['as' => 'posts']);

et le résultat sera comme

 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
0
Uzair