本文檔最新版為 6.x,舊版本可能放棄維護,推薦閱讀最新版!
HTTP 路由
Basic Routing
你可以在 app/Http/routes.php 檔案中定義應用程式的大多數路由。最基本的 Lumen 路由僅接受 URI 和一個閉包:
$app->get('foo', function () {
return 'Hello World';
});
$app->post('foo', function () {
//
});
可供使用的路由方法
我們可以注冊路由來響應任何方法的 HTTP 請求:
$app->get($uri, $callback);
$app->post($uri, $callback);
$app->put($uri, $callback);
$app->patch($uri, $callback);
$app->delete($uri, $callback);
$app->options($uri, $callback);
路由參數
必選參數
有時候你可能需要從 URI 中擷取一些參數。例如,從 URL 擷取使用者的 ID。這時可通過自定義路由參數來擷取:
$app->get('user/{id}', function ($id) {
return 'User '.$id;
});
你可以依照路由需要,定義任意數量的路由參數:
$app->get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
//
});
路由的參數都會被放在「大括号」内。當運作路由時,參數會通過路由閉包來傳遞。
注意: 路由參數不能包含 - 字元。請用下劃線 (_) 替換。
命名路由
命名路由讓你可以更友善的為特定路由生成 URL 或進行重定向。你可以使用 as 數組鍵指定名稱到路由上:
$app->get('profile', ['as' => 'profile', function () {
//
}]);
還可以指定路由名稱到控制器動作:
$app->get('profile', [
'as' => 'profile', 'uses' => '[email protected]'
]);
對命名路由生成 URLs
一旦你在指定的路由中配置設定了名稱,則可通過 route 函數來使用路由名稱生成 URLs 或重定向:
// 生成 URLs...
$url = route('profile');
// 生成重定向...
return redirect()->route('profile');
如果路由定義了參數,那麼你可以把參數作為第二個參數傳遞給 route 方法。指定的參數将自動加入到 URL 中:
$app->get('user/{id}/profile', ['as' => 'profile', function ($id) {
//
}]);
$url = route('profile', ['id' => 1]);
路由群組
路由群組允許你共用路由屬性,例如:中間件、命名空間,你可以利用路由群組統一為多個路由設定共同屬性,而不需在每個路由上都設定一次。共用屬性被指定為數組格式,當作 $app->group 方法的第一個參數。
為了了解更多路由群組的相關内容,我們可通過幾個常用樣例來熟悉這些特性。
中間件
指定中間件到所有群組内的路由中,則可以在群組屬性數組裡使用 middleware 參數。中間件将會依照清單内指定的順序運作:
$app->group(['middleware' => 'auth'], function () use ($app) {
$app->get('/', function () {
// Uses Auth Middleware
});
$app->get('user/profile', function () {
// Uses Auth Middleware
});
});
命名空間
另一個常見的例子是,指定相同的 PHP 命名空間給控制器群組。可以使用 namespace 參數來指定群組内所有控制器的命名空間:
$app->group(['namespace' => 'App\Http\Controllers\Admin'], function() use ($app)
{
// 控制器在「App\Http\Controllers\Admin」命名空間
$app->group(['namespace' => 'App\Http\Controllers\Admin\User'], function() use ($app) {
// 控制器在「App\Http\Controllers\Admin\User」命名空間
});
});
路由字首
通過路由群組數組屬性中的 prefix,在路由群組内為每個路由指定的 URI 加上字首。例如,你可能想要在路由群組中将所有的路由 URIs 加上字首 admin:
$app->group(['prefix' => 'admin'], function () use ($app) {
$app->get('users', function () {
// Matches The "/admin/users" URL
});
});
你也可以使用 prefix 參數去指定路由群組中共用的參數:
$app->group(['prefix' => 'accounts/{account_id}'], function () use ($app) {
$app->get('detail', function ($accountId) {
// Matches The "/accounts/{account_id}/detail" URL
});
});