PHP laravel實現基本路由配置詳解
目錄
- 1.路由的基本介紹
- 2.有效的路由方法
- 3.路由重定向
- 4.路由參數
- 5.路由分組
- 6.兜底路由
- 7.頻率限制
- 8.獲取當前訪問路由屬性
在使用laravel之前我一直在使用thinkphp還有yii框架,這兩個框架也有路由這一說,但是都沒有用過。
Laravel的路由功能其實還是挺全的,也很優雅~
下面來說正題:
1.路由的基本介紹
Laravel框架默認為我們提供了兩個路由文件,在根目錄下的routes目錄下有web.php以及api.php。這些文件通過框架自動加載,相應邏輯位于 app/Providers/RouteServiceProvider 類。routes/web.php 文件定義了 Web 界面的路由,這些路由被分配到了 web 中間件組,從而可以使用 Session 和 CSRF 保護等功能。routes/api.php 中的路由是無狀態的,這是因為被分配到了 api 中間件組。
一般情況下,我們都會使用web.php來開始定義路由。定義在 routes/web.php 中的路由可以通過在瀏覽器地址欄輸入相應的 URL 進行訪問,例如,你可以通過 blog.test/user 訪問下面的路由:
Route::get("/user", "UsersController@index");
正如前面所提到的,定義在 routes/api.php 文件中的路由通過 app/Providers/RouteServiceProvider 的處理被嵌套在一個路由群組中, 在這個群組中,所有路由會被自動添加 /api 前綴,所以你不需要再到路由文件中為每個路由手動添加,你可以通過編輯 RouteServiceProvider 類來修改路由前綴以及其他的路由群組選項:
/** * Define the "api" routes for the application. * * These routes are typically stateless. * * @return void */ protected function mapApiRoutes() { Route::prefix("api") ->middleware("api") ->namespace($this->namespace) ->group(base_path("routes/api.php")); }
2.有效的路由方法
我們可以注冊路由來響應任何 HTTP 請求動作:
Route::get($uri, $callback); Route::post($uri, $callback); Route::put($uri, $callback); Route::patch($uri, $callback); Route::delete($uri, $callback); Route::options($uri, $callback);
3.路由重定向
如果你需要定義一個重定向到其他 URI 的路由,可以使用 Route::redirect 方法,該方法非常方便,以至于你不需要再定義額外的路由或控制器來執行簡單的重定向邏輯:
Route::redirect("/here", "/there");
其中 here 表示原路由,there 表示重定向之后的路由。默認情況下,Route::redirect 返回 302 狀態碼,你可以使用可選的第三個參數來自定義這個狀態碼:
Route::redirect("/here", "/there", 301);
你還可以使用 Route::permanentRedirect 方法來返回 301 狀態碼:
Route::permanentRedirect("/here", "/there");
4.路由參數
(1):必選參數
單個參數
Route::get("user/{id}", function ($id) { return "User " . $id; });
多個參數
Route::get("posts/{post}/comments/{comment}", function ($postId, $commentId) { return $postId . "-" . $commentId; });
(2):可選參數
Route::get("user/{name?}", function ($name = null) { return $name; });
5.路由分組
(1):中間件路由分組
要給某個路由分組中定義的所有路由分配中間件,可以在定義分組之前使用 middleware 方法。中間件將會按照數組中定義的順序依次執行:
Route::middleware(["first", "second"])->group(function () { Route::get("/", function () { // Uses first & second Middleware }); Route::get("user/profile", function () { // Uses first & second Middleware }); });
(2):路由前綴
prefix 方法可以用來為分組中每個路由添加一個給定 URI 前綴,例如,你可以為分組中所有路由 URI 添加 admin 前綴 :
Route::prefix("admin")->group(function () { Route::get("users", function () { // Matches The "/admin/users" URL }); });
6.兜底路由
使用 Route::fallback 方法可以定義一個當所有其他路由都未能匹配請求 URL 時所執行的路由。通常,未處理請求會通過 Laravel 的異常處理器自動渲染一個「404」頁面,不過,如果你在 routes/web.php 文件中定義了 fallback 路由的話,所有 web 中間件組中的路由都會應用此路由作為兜底,當然,如果需要的話,你還可以添加額外的中間件到此路由:
Route::fallback(function () { // });
7.頻率限制
Laravel 自帶了一個中間件用于限制對應用路由的訪問頻率。開始使用該功能之前,分配 throttle 中間件到某個路由或路由分組,throttle 中間件接收兩個參數用于判斷給定時間內(單位:分鐘)的最大請求次數。例如,我們指定登錄用戶每分鐘只能訪問下面的分組路由 60 次:
Route::middleware("auth:api", "throttle:60,1")->group(function () { Route::get("/user", function () { // }); });
超出訪問次數后,會返回 429 狀態碼并提示「Too many requests」。
動態頻率限制
此外,還可以基于 User 模型的屬性來動態設置最大請求次數。例如,如果 User 模型包含 rate_limit 屬性,就可以將其這個屬性名傳遞到 throttle 中間件,這樣就可以將屬性值作為計算最大請求次數的數據來源:
Route::middleware("auth:api", "throttle:rate_limit,1")->group(function () { Route::get("/user", function () { // }); });
8.獲取當前訪問路由屬性
你可以使用 Route 門面上的 current、currentRouteName 和 currentRouteAction 方法來訪問處理當前輸入請求的路由信息:
// 獲取當前路由實例 $route = Route::current(); // 獲取當前路由名稱 $name = Route::currentRouteName(); // 獲取當前路由action屬性 $action = Route::currentRouteAction();
到此這篇關于PHP laravel實現基本路由配置詳解的文章就介紹到這了,更多相關PHP laravel路由配置內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!
