2015-08-04 11 views
8

Ich habe Laravel 5.1 Dokumentation gelesen. Ich habe nicht verstanden, wie die Laravel-Routegruppe funktioniert und was der Unterschied zwischen folgenden Routegruppen ist.Unterschied zwischen Middleware-Route-Gruppe und Namespaces-Route-Gruppe in Laravel 5.1?

Routen Gruppen & Named Routen

Wenn Sie Route Gruppen verwenden, können Sie eine als Schlüsselwort in der Routengruppenattribut-Array angeben, so dass Sie für alle Routen innerhalb der Gruppe einen gemeinsamen Routennamen Präfix einstellen :

Route::group(['as' => 'admin::'], function() { 
    Route::get('dashboard', ['as' => 'dashboard', function() { 
     // Route named "admin::dashboard" 
    }]); 
}); 

Middleware

um Middleware auf allen Strecken innerhalb einer Gruppe zuordnen, können Sie kann den Middleware-Schlüssel im Gruppenattribut-Array verwenden. Middleware werden in der Reihenfolge Sie dieses Array definieren ausgeführt werden:

Route::group(['middleware' => 'auth'], function() { 
    Route::get('/', function() { 
     // Uses Auth Middleware 
    }); 

    Route::get('user/profile', function() { 
     // Uses Auth Middleware 
    }); 
}); 

Namespaces

Ein weiterer häufiger Anwendungsfall für die Routen Gruppen die gleiche PHP Namespace zu einer Gruppe von Controllern zugewiesen werden. Sie können den Namespace-Parameter in der Gruppe Attribut Array verwenden den Namensraum für alle Regler innerhalb der Gruppe zu spezifizieren:

Route::group(['namespace' => 'Admin'], function() 
    { 
     // Controllers Within The "App\Http\Controllers\Admin" Namespace 
     Route::group(['namespace' => 'User'], function() 
     { 
      // Controllers Within The "App\Http\Controllers\Admin\User" Namespace 
     }); 
    }); 

Sub-Domain Routing

Routengruppen auch zu routen Wildcard Unter verwendet werden können, Domänen. Unterdomänen können wie Routen-URIs Routenparameter zugewiesen werden, sodass Sie einen Teil der Subdomäne für die Verwendung in Ihrer Route oder Ihrem Controller erfassen können. Die Unter-Domäne kann den Domänenschlüssel auf dem Gruppenattribut Array angegeben werden:

Route::group(['domain' => '{account}.myapp.com'], function() { 
    Route::get('user/{id}', function ($account, $id) { 
     // 
    }); 
});  

Strecke Präfixe

Das Array Attribut prefix Gruppe kann jede Route in der Gruppe mit einem bestimmten Präfix verwendet werden, URI. Zum Beispiel können Sie alle Routen URIs innerhalb der Gruppe mit Admin-Präfix:

Route::group(['prefix' => 'admin'], function() { 
    Route::get('users', function() { 
     // Matches The "/admin/users" URL 
    }); 
}); 

Sie können auch den Präfix-Parameter verwenden, um gemeinsame Parameter für die gruppierte Routen angeben:

Route::group(['prefix' => 'accounts/{account_id}'], function() { 
    Route::get('detail', function ($account_id) { 
     // Matches The accounts/{account_id}/detail URL 
    }); 
}); 

Ref: http://laravel.com/docs/5.1/routing

Antwort

9

Mit Routengruppen können Sie Routen mit gemeinsamen Attributen gruppieren, ohne diese Attribute für jede Route neu definieren zu müssen.

Beispiel

als Beispiel den Attributnamensraum Array kann verwendet werden.

Angenommen, wir haben einen Controller namens NewsController, der die gesamte Admin-Logik für den Nachrichtenbereich Ihrer Apps enthält. Sie können diese Datei im Verzeichnis "App/Http/Controllers/Admin" ablegen.

Laravel 5 folgt PSR-4 autoloading conventions, so dass die Anwendung expcets den Namespace auf den Pfad der Datei identisch sein, so dass unsere Klasse wie folgt aussehen könnte:

<?php 

namespace App\Http\Controllers\Admin; 

class NewsController 
{ 

} 

Wir haben einen Weg zu dieser Klasse schreiben könnte wie so:

Route::get('admin/news', [ 
    'uses' => 'Admin\[email protected]' 
]); 

Hinweis: Laravel automatisch übernimmt alle Controller im App/Http/Controllers Verzeichnis sein wird, damit wir diese verlassen aus alle Controller-Deklarationen in der Routes-Datei.

Die oben genannten sollten gut funktionieren, aber vielleicht haben Sie auch ein Dutzend andere Klassen-Dateien, die mit Admin-Logik alle innerhalb des gleichen Namespace beschäftigen. Wir können die Namespace-Option verwenden, um diese zusammen zu gruppieren.

Route::group(['namespace' => 'Admin'], function() 
{ 
    Route::get('admin/news', [ 
     'uses' => '[email protected]' 
    ]); 

    Route::get('admin/users', [ 
     'uses' => '[email protected]' 
    ]); 

    ... 
}); 

Beachten Sie, wie ich nicht mehr die für jede Route Admin Namespace für den Controller definieren.

Derselbe Prozess kann auf Middleware, Subdomains und URL-Präfixe angewendet werden.

Weiteres Beispiel

Läßt das erste Beispiel nehmen und darauf aufbauen. Wie Sie aus den obigen Routenerklärungen sehen können, teilen sich alle unsere Admin-Routen ein gemeinsames URL-Präfix.

http://example.com/Admin/news
http://example.com/Admin/users

Wir verwenden das prefix Array schreiben die gemeinsame URL für unsere Routen zu definieren. In unserem Fall ist dies admin.

Unsere aktualisierte Route Deklarationen würde so aussehen.

Route::group(['namespace' => 'Admin', 'prefix' => 'admin'], function() 
{ 
    Route::get('news', [ 
     'uses' => '[email protected]' 
    ]); 

    Route::get('users', [ 
     'uses' => '[email protected]' 
    ]); 

    ... 
}); 

Sie fragen sich wahrscheinlich, warum das nützlich wäre? Stellen Sie sich vor, Sie haben eine große Anwendung mit Dutzenden, wenn nicht Hunderte von Routen entwickelt. Dann kommt eines Tages Ihr Chef zu Ihnen und sagt "Hey Herr Tester, wir müssen die Admin-URL von /admin zu /cms ändern, wie lange wird das dauern?".

Wenn Sie alle Ihre Routen mit Gruppen mit dem Präfix Array-Attribut wie oben deklariert haben, wird dies ein einfacher und schmerzloser Prozess für Sie sein.

+0

danke für die gute explaination.i werde das mit einem Beispielprojekt versuchen. – vision

+0

Wie erlaubt man Zugang Admin-URL nur zu Admin? Wenn Sie mehrere Benutzer wie admin, manager und nor- male Benutzer haben, geben Sie – vision

+0

@ tester an. Dann sollten Sie ein Middleware-Attribut verwenden. – Jeemusu