2015-08-04 21 views
8

Czytałem dokumentację w języku laravel 5.1. Nie rozumiem, jak działa grupa tras w skali larwalnej i jaka jest różnica między następującymi grupami tras.Różnica między grupą tras pośrednich a obszarami nazw w grupie języków w wersji 5.1 5.1?

Grupy Route & nazwane Trasy

Jeśli używasz grup tras, można określić jako słowa kluczowego w tablicy atrybutów grupy trasy, co pozwala na ustawienie wspólną nazwą trasa prefiks dla wszystkich tras w obrębie grupy :

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

Middleware

Aby przypisać middleware do wszystkich tras w obrębie grupy, może używać klucza warstwy pośredniej w tablicy atrybutów grup. Middleware będą realizowane w kolejności zdefiniować tę tablicę:

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

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

Przestrzenie nazw

Innym częstym use-case dla grup trasa jest przypisanie tego samego PHP nazw do grupy kontrolerów. Można użyć parametru przestrzeni nazw w tablicy atrybutów grupy, aby określić obszar nazw dla wszystkich sterowników w grupie:

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

grupy trasa może być również używany do trasy wieloznacznym pod- domeny. Subdomeny mogą mieć przypisane parametry trasy, podobnie jak identyfikatory URI trasy, pozwalające na przechwycenie części subdomen do wykorzystania na trasie lub kontrolerze. Subdomena może być określona za pomocą klucza domeny w tablicy atrybutów grupę:

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

trasy prefiksów

atrybut tablica grupy prefiks można stosować poprzedzający każdą trasę w grupie z daną URI. Na przykład, może chcesz poprzedzić wszystkie URI trasy w obrębie grupy z admin:

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

Można również użyć parametru prefiksu określić wspólne parametry dla zgrupowanych trasach:

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

Odpowiedz

9

Grupy tras pozwalają grupować trasy, które mają wspólne atrybuty, bez konieczności ponownego definiowania tych atrybutów dla każdej trasy.

Przykład

Jako przykład pozwala użyciu atrybutu tablicy przestrzeni nazw.

Załóżmy, że mamy kontroler o nazwie NewsController, który zawiera całą logikę dla działu wiadomości. Możesz umieścić ten plik w katalogu "App/Http/Controllers/Admin`.

laravel 5 następująco PSR-4 autoloading conventions, więc aplikacja expcets przestrzeń nazw być identyczne do ścieżki pliku, więc nasza klasa może wyglądać mniej więcej tak:

<?php 

namespace App\Http\Controllers\Admin; 

class NewsController 
{ 

} 

Moglibyśmy pisać trasę do tej klasy jak tak:

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

Uwaga: laravel automatycznie przejmuje wszystkie sterowniki będą w katalogu App/Http/Controllers więc możemy zostawić to z wszelkie deklaracje kontrolerów w pliku tras.

Powyższe powinno działać poprawnie, ale być może masz także kilkanaście innych plików klas, które zajmują się logiką Admin w obrębie tej samej przestrzeni nazw. Możemy użyć opcji przestrzeni nazw, aby pogrupować je razem.

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

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

    ... 
}); 

Wskazówki, jak już nie definiują przestrzeń nazw Admin dla kontrolera na każdej trasie.

Ten sam proces można zastosować do oprogramowania pośredniego, subdomen i przedrostków url.

kolejny przykład

Weźmy pierwszy przykład i opiera się na niej. Jak widać z powyższych deklaracji tras wszystkie nasze trasy administracyjne mają wspólny przedrostek url.

http://example.com/Administrator/news
http://example.com/Administrator/użytkownicy

Możemy użyć tablica prefix przypisują zdefiniować wspólny adres dla naszych trasach. W naszym przypadku jest to admin.

Nasze zaktualizowane deklaracje trasy wyglądałyby tak.

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

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

    ... 
}); 

Twój prawdopodobnie zastanawiasz się, dlaczego miałoby to być przydatne? Wyobraź sobie, że stworzyłeś dużą aplikację z dziesiątkami, jeśli nie setkami tras. Pewnego dnia twój szef przyjdzie do ciebie i powie: "Hej, panie tester, musimy zmienić adres URL administratora z /admin na /cms, jak długo to potrwa?".

Jeśli zadeklarowałeś wszystkie swoje trasy używając grup z atrybutem tablicy prefiksów, jak wyżej, będzie to dla ciebie łatwy i bezbolesny proces.

+0

dziękuję za dobre wyjaśnienie.i spróbuje tego za pomocą jednego przykładowego projektu. – vision

+0

jak zezwolić na dostęp do strony admin tylko administratorowi? .suppose, jeśli mamy wielu użytkowników, takich jak administrator, menedżer i zwykły użytkownik, – vision

+0

@tester To jest, kiedy chcesz użyć atrybutu middleware. – Jeemusu