天天看點

app http routes.php,HTTP 路由 |《Lumen 中文文檔 5.3 5.3》| Laravel China 社群

本文檔最新版為 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

});

});

上一篇: laravel 坑
下一篇: 12.事務控制