[英]Difference between middleware route group and namespaces route group in laravel 5.1?
我正在閱讀laravel 5.1文檔。 我不明白laravel路由組如何工作以及以下路由組之間的區別。
路由組和命名路由
如果使用路由組,則可以在路由組屬性數組中指定as關鍵字,允許您為組內的所有路由設置公共路由名稱前綴:
Route::group(['as' => 'admin::'], function () {
Route::get('dashboard', ['as' => 'dashboard', function () {
// Route named "admin::dashboard"
}]);
});
中間件
要將中間件分配給組中的所有路由,可以使用組屬性數組中的中間件密鑰。 中間件將按您定義此數組的順序執行:
Route::group(['middleware' => 'auth'], function () {
Route::get('/', function () {
// Uses Auth Middleware
});
Route::get('user/profile', function () {
// Uses Auth Middleware
});
});
命名空間
路由組的另一個常見用例是將相同的PHP命名空間分配給一組控制器。 您可以在組屬性數組中使用namespace參數來指定組中所有控制器的命名空間:
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
});
});
子域路由
路由組也可用於路由通配符子域。 可以像路由URI一樣為子域分配路由參數,允許您捕獲子域的一部分以供路由或控制器使用。 可以使用組屬性數組上的域密鑰指定子域:
Route::group(['domain' => '{account}.myapp.com'], function () {
Route::get('user/{id}', function ($account, $id) {
//
});
});
路線前綴
前綴組數組屬性可用於為組中的每個路由添加給定URI。 例如,您可能希望使用admin為組內的所有路由URI添加前綴:
Route::group(['prefix' => 'admin'], function () {
Route::get('users', function () {
// Matches The "/admin/users" URL
});
});
您還可以使用prefix參數指定分組路徑的公共參數:
Route::group(['prefix' => 'accounts/{account_id}'], function () {
Route::get('detail', function ($account_id) {
// Matches The accounts/{account_id}/detail URL
});
});
路由組允許您將共享公共屬性的路由組合在一起,而無需為每個路由重新定義所述屬性。
舉個例子,我們可以使用命名空間數組屬性。
假設我們有一個名為NewsController
的控制器,其中包含應用新聞部分的所有管理邏輯。 您可以將此文件放在“App / Http / Controllers / Admin”目錄中。
Laravel 5遵循PSR-4自動加載約定 ,因此應用程序將命名空間與文件路徑相同,因此我們的類可能如下所示:
<?php
namespace App\Http\Controllers\Admin;
class NewsController
{
}
我們可以這樣寫一個到這個類的路由:
Route::get('admin/news', [
'uses' => 'Admin\NewsController@index'
]);
注意 : Laravel會自動假設您的所有控制器都位於App/Http/Controllers
目錄中,因此我們可以將其保留在routes文件中的任何控制器聲明中。
上面應該可以正常工作,但也許你還有十幾個其他類文件在同一個命名空間內處理管理邏輯。 我們可以使用命名空間選項將這些組合在一起。
Route::group(['namespace' => 'Admin'], function()
{
Route::get('admin/news', [
'uses' => 'NewsController@index'
]);
Route::get('admin/users', [
'uses' => 'UserController@index'
]);
...
});
請注意我不再為每個路由定義控制器的Admin
命名空間。
相同的過程可以應用於中間件,子域和URL前綴。
讓我們拿第一個例子並在它上面構建。 從上面的路由聲明中可以看出,我們所有的管理路由共享一個公共URL前綴。
http://example.com/ admin / news
http://example.com/ admin / users
我們可以使用prefix
數組屬性來定義路由的公共URL。 在我們的例子中,這是admin
。
我們更新的Route聲明看起來像這樣。
Route::group(['namespace' => 'Admin', 'prefix' => 'admin'], function()
{
Route::get('news', [
'uses' => 'NewsController@index'
]);
Route::get('users', [
'uses' => 'UserController@index'
]);
...
});
您可能想知道為什么這會有用嗎? 好吧,你已經開發了一個包含數十條甚至數百條路線的大型應用程序。 然后有一天,你的老板來找你說“嘿先生測試員,我們需要將管理員網址從/admin
更改為/cms
,這需要多長時間?”。
如果您使用具有前綴數組屬性的組聲明所有路由,如上所述,這對您來說將是一個簡單而輕松的過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.