webentwicklung-frage-antwort-db.com.de

Laravel benannte Route für den Ressourcencontroller

Ist es mit Laravel 4.2 möglich, einer Route eines Ressourcencontrollers einen Namen zuzuweisen? Meine Route ist wie folgt definiert:

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

Ich habe versucht, der Route eine Namensoption hinzuzufügen:

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

Wenn ich jedoch die/faq-Route anrufe und {{ Route::currentRouteName() }} in meiner Ansicht platziere, wird faq.faq.index anstelle von faq angezeigt.

38
flyingL123

Wenn Sie eine Ressourcencontroller-Route verwenden, generiert sie automatisch Namen für jede einzelne Route, die sie erstellt. Route::resource() ist im Grunde eine Hilfsmethode, die dann individuelle Routen für Sie generiert, anstatt jede Route manuell definieren zu müssen.

Sie können die Routennamen anzeigen, indem Sie php artisan routes in Laravel 4 oder php artisan route:list in Laravel 5 in Ihr Terminal/Ihre Konsole eingeben. Sie können auch die Arten von Routennamen anzeigen, die auf der Seite mit den Ressourcencontrollern ( Laravel 4.x | Laravel 5.x ) generiert wurden.

Es gibt zwei Möglichkeiten, die von einem Ressourcencontroller generierten Routennamen zu ändern:

  1. Geben Sie ein names-Array als Teil des dritten $options-Arrays an, wobei jeder Schlüssel die Ressourcenkontrollermethode (Index, Store, Edit usw.) ist und der Wert der Name ist, den Sie der Route geben möchten.

    Route::resource('faq', 'ProductFaqController', [
        'names' => [
            'index' => 'faq',
            'store' => 'faq.new',
            // etc...
        ]
    ]);
    
  2. Geben Sie die Option as an, um für jeden Routennamen ein Präfix zu definieren.

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

    Dadurch erhalten Sie Routen wie prefix.faq.index, prefix.faq.store usw.

117
Aken Roberts

Für Antwortsuchende mit Laravel 5.5+ finden Sie diese Seite:

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

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

});

Diese Optionen führen zu folgenden Ergebnissen für die Ressource:

  • namespace() setzt den Controller-Namespace auf\Admin\UserController

  • prefix() setzt die Anfrage URi auf/admin/users

  • name() setzt den Zugriff auf den Routennamen auf route('admin.users.index')

In name() ist der DOT vorgesehen, es ist kein Tippfehler.

Bitte lassen Sie andere wissen, ob dies in Kommentaren für Versionen vor Laravel 5.5 funktioniert. Ich werde meine Antwort aktualisieren.

Update:

Ich kann in Laravel 5.3 bestätigen, dass die name-Methode nicht verfügbar ist . Noch keine Bestätigung, wenn in 5.4 unterstützt.

Taylor akzeptierte meine PR, um dies offiziell in 5.5 zu dokumentieren:

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

10
Marc Newton

Verwenden von Laravel 5.5

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

wichtig, die " resource " zu beachten

Zum Beispiel sende ich etwas aus meinem Projekt:

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

sie brauchen keinen Namen in der Ressource in laravel 5.7 zu setzen, dass ich es getestet habe. Es generiert automatisch einen Routennamen aus der URL.

1
Omid Ahmadyani

Alle Updates später dann Laravel 5.5 Using

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

wenn wir nicht ['as' => 'faqs'] im obigen Code verwenden, funktioniert es auch gleich.

[Aktualisierte]

Bitte beachten Sie, dass dies für " resource " funktioniert.

Zum Beispiel:

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

und das Ergebnis wird wie sein

 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