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.
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:
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...
]
]);
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.
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
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']);
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.
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