久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Laravel學習教程之路由模塊

這篇文章主要給大家介紹了Laravel學習教程之路由模塊的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或使用laravel具有一定的參考學習價值,需要的朋友們下面跟著小編來一

前言

本文主要給大家介紹的是關于Laravel路由模塊的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

備注:本文是基于Laravel 5.4版本的路由模塊代碼進行分析書寫;

模塊組成

下圖展示了路由模塊中各個文件的關系,并進行簡要說明;

Laravel學習教程之路由模塊

剖析

服務提供者

看Laravel模塊,首先找ServiceProvider文件,這是模塊與IOC容器交互的入口,從這個文件,可以看出該模塊提供向系統提供了哪些服務;

public function register() {
 // 注冊路由管理,提供路由注冊,路由匹配的功能
 $this->registerRouter();
 // 注冊 Url 生成器實例
 $this->registerUrlGenerator();
 // 注冊跳轉器
 $this->registerRedirector();
 // 綁定 PSR-7 請求實現到 ServerRequestInterface 接口
 $this->registerPsrRequest();
 // 綁定 PSR-7 Response 實現到 ResponseInterface 接口
 $this->registerPsrResponse();
 // 注冊 ReponseFactory,提供各式各樣的 Response,比如視圖響應、Json響應、Jsonp響應、文件下載等
 $this->registerResponseFactory();
}

路由管理

“路由管理”服務有以下元素需要了解:

  • Route:路由;會記錄 Url、Http 動作、Action (路由要執行的具體對象,可能是 Closure,也可以是某個 Controller 中的方法),路由參數,路由參數的約束;
  • RouteCollection:路由集,用來存儲所有Route對象的“盒子”;
  • RouteGroup:路由組;只有路由注冊過程中會臨時用到;存儲一批路由公共的一些屬性,屬性包括domain、prefix、as、middleware、namespace、where;
  • Resource:資源路由;資源路由是一套路由的統稱,包含列表(index)、顯示增加(create)、保存增加(store)、顯示詳情(show)、顯示編輯詳情(edit)、更新編輯(update)、刪除詳情(destory);同時可以通過調用only或except方法或參數的形式只生成部分路由;
  • Action:路由要執行的對象;有兩種表現形式,一是Closure函數,二是類似['uses' => 'FooController@method', 'as' => 'name']這樣的字符串;對于不同的表現形式,路由在執行時會調用不同的處理;

注冊流程

在項目啟動后,會執行所有ServiceProvider的loadRoutes方法,也就是調用map方法,一般情況下map方法如下

public function map(Router $router){
 require __DIR__.'/routes.php';
}

這時候,項目就會執行很多Route::getRoute::postRoute::group方法;

當遇到Route::group方法時,會實例化一個RouteGroup對象,put進Router管理類的路由組棧頭部;而后當執行get、post這類具體的注冊路由方法時,會把當前路由組棧中所有組的屬性合并進新路由中,將新路由存儲在RouteCollection這個大盒子里;當Route::group的Closure執行完畢時,會把頭部的RouteGroup實例pull出去;

當執行Route::resource時,Router管理類會調用ResourceRegister類來完成批量注冊路由;

對于 Router::get這類注冊方法,Illuminate\Foudation\helpers提供了簡寫;

  • Router::get 簡化成 get,
  • Router::post 簡化成 post,
  • Router::put 簡化成 put,
  • Router::patch 簡化成 patch,
  • Router::delete 簡化成 delete,
  • Router::resource簡化成 resource,

至此,RouteCollection大盒子就存放了所有要注冊的路由;

request 請求匹配流程

首先,request請求會經過Foundation/Http/Kernel的handle方法,在這個方法中,請求會執行以下語句

$this->router->dispatch($request)

這里的$this->router,就是Router管理類;dispatch方法如下

public function dispatch(Request $request) {
 $this->currentRequest = $request;
 return $this->dispatchToRoute($request);
}

public function dispatchToRoute(Request $request) {
 // 根據請求的 url 找到匹配的路由
 $route = $this->findRoute($request);
 // 將路由綁定到請求上
 $request->setRouteResolver(function () use ($route) {
 return $route;
 }
 // 觸發 RouteMatched 事件
 $this->events->dispatch(new Events\RouteMatched($route, $request));
 // 通過 Pipeline 流水線執行路由上綁定的中間件及對應的方法
 $response = $this->runRouteWithinStack($route, $request);
 // 根據 request 請求設置 response 的響應頭
 return $this->prepareResponse($request, $response);
}

1、根據請求找匹配的路由

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

下面小編就為大家分享一篇laravel ORM 只開啟created_at的幾種方法總結,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要給大家介紹了如何通過源碼解析Laravel的依賴注入的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關于Laravel中unique和exists驗證規則的優化的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面
最近在使用laravel5.5,利用其實現了一個功能,下面分享給大家,這篇文章主要給大家介紹了關于Laravel 5.5基于內置的Auth模塊如何實現前后臺登陸的相關資料,文中通過示例代碼介紹的非
laravel 的隊列服務對各種不同的后臺隊列服務提供了統一的 API,下面這篇文章通過源碼分析給大家介紹了關于 Laravel 重復執行同一個隊列任務的原因,文中通過示例代碼介紹的非常詳細
這篇文章主要給大家介紹了關于 Laravel Redis 多個進程同時取隊列問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友下面來
主站蜘蛛池模板: 亚洲精品伦理 | 欧美高清在线 | 日韩av在线免费播放 | 日韩成人av在线 | 青草国产 | 日韩免费一区二区三区 | 国产欧美日韩一区 | av观看网站 | 国产在线视频91 | 欧美一级特黄视频 | 亚洲精品午夜 | 成年网站在线观看 | 黑人操亚洲女人 | 色一情一乱一伦一区二区三区 | av手机版 | 免费一区二区视频 | 视频在线观看一区 | 免费三片在线播放 | 成人国产网站 | 国产一区久久 | 日韩视频免费大全中文字幕 | 伊人影院久久 | 99热在线播放 | 一级免费看 | 97色在线| 日本香蕉视频 | 欧美成人一级片 | 久操福利| 国产精品123| 成人黄色大片 | 高潮毛片又色又爽免费 | 亚洲欧美精品一区 | 中文字幕在线观看免费视频 | 亚洲天堂视频在线观看 | 久久精品2 | 国产美女免费 | 日韩 欧美 | 国产一级18片视频 | 国产91在线看 | 91视频在线观看 | www.av在线|