PHP?laravel實(shí)現(xiàn)基本路由配置詳解
在使用laravel之前我一直在使用thinkphp還有yii框架,這兩個(gè)框架也有路由這一說,但是都沒有用過。
Laravel的路由功能其實(shí)還是挺全的,也很優(yōu)雅~
下面來說正題:
1.路由的基本介紹
Laravel框架默認(rèn)為我們提供了兩個(gè)路由文件,在根目錄下的routes目錄下有web.php以及api.php。這些文件通過框架自動(dòng)加載,相應(yīng)邏輯位于 app/Providers/RouteServiceProvider 類。routes/web.php 文件定義了 Web 界面的路由,這些路由被分配到了 web 中間件組,從而可以使用 Session 和 CSRF 保護(hù)等功能。routes/api.php 中的路由是無狀態(tài)的,這是因?yàn)楸环峙涞搅?api 中間件組。
一般情況下,我們都會(huì)使用web.php來開始定義路由。定義在 routes/web.php 中的路由可以通過在瀏覽器地址欄輸入相應(yīng)的 URL 進(jìn)行訪問,例如,你可以通過 blog.test/user 訪問下面的路由:
Route::get('/user', 'UsersController@index');
正如前面所提到的,定義在 routes/api.php 文件中的路由通過 app/Providers/RouteServiceProvider 的處理被嵌套在一個(gè)路由群組中, 在這個(gè)群組中,所有路由會(huì)被自動(dòng)添加 /api 前綴,所以你不需要再到路由文件中為每個(gè)路由手動(dòng)添加,你可以通過編輯 RouteServiceProvider 類來修改路由前綴以及其他的路由群組選項(xiàng):
/**
* 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.有效的路由方法
我們可以注冊路由來響應(yīng)任何 HTTP 請求動(dòng)作:
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.路由重定向
如果你需要定義一個(gè)重定向到其他 URI 的路由,可以使用 Route::redirect 方法,該方法非常方便,以至于你不需要再定義額外的路由或控制器來執(zhí)行簡單的重定向邏輯:
Route::redirect('/here', '/there');
其中 here 表示原路由,there 表示重定向之后的路由。默認(rèn)情況下,Route::redirect 返回 302 狀態(tài)碼,你可以使用可選的第三個(gè)參數(shù)來自定義這個(gè)狀態(tài)碼:
Route::redirect('/here', '/there', 301);
你還可以使用 Route::permanentRedirect 方法來返回 301 狀態(tài)碼:
Route::permanentRedirect('/here', '/there');
4.路由參數(shù)
(1):必選參數(shù)
單個(gè)參數(shù)
Route::get('user/{id}', function ($id) {
return 'User ' . $id;
});
多個(gè)參數(shù)
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
return $postId . '-' . $commentId;
});
(2):可選參數(shù)
Route::get('user/{name?}', function ($name = null) {
return $name;
});
5.路由分組
(1):中間件路由分組
要給某個(gè)路由分組中定義的所有路由分配中間件,可以在定義分組之前使用 middleware 方法。中間件將會(huì)按照數(shù)組中定義的順序依次執(zhí)行:
Route::middleware(['first', 'second'])->group(function () {
Route::get('/', function () {
// Uses first & second Middleware
});
Route::get('user/profile', function () {
// Uses first & second Middleware
});
});
(2):路由前綴
prefix 方法可以用來為分組中每個(gè)路由添加一個(gè)給定 URI 前綴,例如,你可以為分組中所有路由 URI 添加 admin 前綴 :
Route::prefix('admin')->group(function () {
Route::get('users', function () {
// Matches The "/admin/users" URL
});
});
6.兜底路由
使用 Route::fallback 方法可以定義一個(gè)當(dāng)所有其他路由都未能匹配請求 URL 時(shí)所執(zhí)行的路由。通常,未處理請求會(huì)通過 Laravel 的異常處理器自動(dòng)渲染一個(gè)「404」頁面,不過,如果你在 routes/web.php 文件中定義了 fallback 路由的話,所有 web 中間件組中的路由都會(huì)應(yīng)用此路由作為兜底,當(dāng)然,如果需要的話,你還可以添加額外的中間件到此路由:
Route::fallback(function () {
//
});
7.頻率限制
Laravel 自帶了一個(gè)中間件用于限制對應(yīng)用路由的訪問頻率。開始使用該功能之前,分配 throttle 中間件到某個(gè)路由或路由分組,throttle 中間件接收兩個(gè)參數(shù)用于判斷給定時(shí)間內(nèi)(單位:分鐘)的最大請求次數(shù)。例如,我們指定登錄用戶每分鐘只能訪問下面的分組路由 60 次:
Route::middleware('auth:api', 'throttle:60,1')->group(function () {
Route::get('/user', function () {
//
});
});
超出訪問次數(shù)后,會(huì)返回 429 狀態(tài)碼并提示「Too many requests」。
動(dòng)態(tài)頻率限制
此外,還可以基于 User 模型的屬性來動(dòng)態(tài)設(shè)置最大請求次數(shù)。例如,如果 User 模型包含 rate_limit 屬性,就可以將其這個(gè)屬性名傳遞到 throttle 中間件,這樣就可以將屬性值作為計(jì)算最大請求次數(shù)的數(shù)據(jù)來源:
Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
Route::get('/user', function () {
//
});
});
8.獲取當(dāng)前訪問路由屬性
你可以使用 Route 門面上的 current、currentRouteName 和 currentRouteAction 方法來訪問處理當(dāng)前輸入請求的路由信息:
// 獲取當(dāng)前路由實(shí)例 $route = Route::current(); // 獲取當(dāng)前路由名稱 $name = Route::currentRouteName(); // 獲取當(dāng)前路由action屬性 $action = Route::currentRouteAction();
到此這篇關(guān)于PHP laravel實(shí)現(xiàn)基本路由配置詳解的文章就介紹到這了,更多相關(guān)PHP laravel路由配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php輸出控制函數(shù)和輸出函數(shù)生成靜態(tài)頁面
這篇文章主要為大家詳細(xì)介紹了php輸出控制函數(shù)和輸出函數(shù)生成靜態(tài)頁面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
PHP中創(chuàng)建空文件的代碼[file_put_contents vs touch]
php中用file_put_contents比touch快,大約兩倍左右。2012-01-01
基于PHP實(shí)現(xiàn)一個(gè)簡單的http服務(wù)器
這篇文章主要為大家詳細(xì)介紹了如何基于PHP實(shí)現(xiàn)一個(gè)簡單的http服務(wù)器,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12
PHP四種排序算法實(shí)現(xiàn)及效率分析【冒泡排序,插入排序,選擇排序和快速排序】
這篇文章主要介紹了PHP四種排序算法實(shí)現(xiàn)及效率分析,結(jié)合具體實(shí)例形式分析了php冒泡排序,插入排序,選擇排序和快速排序的具體定義、用法及算法復(fù)雜度分析,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2018-04-04
PHP基于二分法實(shí)現(xiàn)數(shù)組查找功能示例【循環(huán)與遞歸算法】
這篇文章主要介紹了PHP基于二分法實(shí)現(xiàn)數(shù)組查找功能,結(jié)合實(shí)例形式分析了while循環(huán)與遞歸調(diào)用算法實(shí)現(xiàn)二分查找功能的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-12-12

