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

Laravel學(xué)習(xí)教程之路由模塊

這篇文章主要給大家介紹了Laravel學(xué)習(xí)教程之路由模塊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或使用laravel具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一

前言

本文主要給大家介紹的是關(guān)于Laravel路由模塊的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。

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

模塊組成

下圖展示了路由模塊中各個(gè)文件的關(guān)系,并進(jìn)行簡(jiǎn)要說(shuō)明;

Laravel學(xué)習(xí)教程之路由模塊

剖析

服務(wù)提供者

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

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

路由管理

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

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

注冊(cè)流程

在項(xiàng)目啟動(dòng)后,會(huì)執(zhí)行所有ServiceProvider的loadRoutes方法,也就是調(diào)用map方法,一般情況下map方法如下

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

這時(shí)候,項(xiàng)目就會(huì)執(zhí)行很多Route::getRoute::postRoute::group方法;

當(dāng)遇到Route::group方法時(shí),會(huì)實(shí)例化一個(gè)RouteGroup對(duì)象,put進(jìn)Router管理類的路由組棧頭部;而后當(dāng)執(zhí)行g(shù)et、post這類具體的注冊(cè)路由方法時(shí),會(huì)把當(dāng)前路由組棧中所有組的屬性合并進(jìn)新路由中,將新路由存儲(chǔ)在RouteCollection這個(gè)大盒子里;當(dāng)Route::group的Closure執(zhí)行完畢時(shí),會(huì)把頭部的RouteGroup實(shí)例pull出去;

當(dāng)執(zhí)行Route::resource時(shí),Router管理類會(huì)調(diào)用ResourceRegister類來(lái)完成批量注冊(cè)路由;

對(duì)于 Router::get這類注冊(cè)方法,Illuminate\Foudation\helpers提供了簡(jiǎn)寫;

  • Router::get 簡(jiǎn)化成 get,
  • Router::post 簡(jiǎn)化成 post,
  • Router::put 簡(jiǎn)化成 put,
  • Router::patch 簡(jiǎn)化成 patch,
  • Router::delete 簡(jiǎn)化成 delete,
  • Router::resource簡(jiǎn)化成 resource,

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

request 請(qǐng)求匹配流程

首先,request請(qǐng)求會(huì)經(jīng)過Foundation/Http/Kernel的handle方法,在這個(gè)方法中,請(qǐng)求會(huì)執(zhí)行以下語(yǔ)句

$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) {
 // 根據(jù)請(qǐng)求的 url 找到匹配的路由
 $route = $this->findRoute($request);
 // 將路由綁定到請(qǐng)求上
 $request->setRouteResolver(function () use ($route) {
 return $route;
 }
 // 觸發(fā) RouteMatched 事件
 $this->events->dispatch(new Events\RouteMatched($route, $request));
 // 通過 Pipeline 流水線執(zhí)行路由上綁定的中間件及對(duì)應(yīng)的方法
 $response = $this->runRouteWithinStack($route, $request);
 // 根據(jù) request 請(qǐng)求設(shè)置 response 的響應(yīng)頭
 return $this->prepareResponse($request, $response);
}

1、根據(jù)請(qǐng)求找匹配的路由

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

下面小編就為大家分享一篇laravel ORM 只開啟created_at的幾種方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
這篇文章主要給大家介紹了如何通過源碼解析Laravel的依賴注入的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關(guān)于Laravel中unique和exists驗(yàn)證規(guī)則的優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面
最近在使用laravel5.5,利用其實(shí)現(xiàn)了一個(gè)功能,下面分享給大家,這篇文章主要給大家介紹了關(guān)于Laravel 5.5基于內(nèi)置的Auth模塊如何實(shí)現(xiàn)前后臺(tái)登陸的相關(guān)資料,文中通過示例代碼介紹的非
laravel 的隊(duì)列服務(wù)對(duì)各種不同的后臺(tái)隊(duì)列服務(wù)提供了統(tǒng)一的 API,下面這篇文章通過源碼分析給大家介紹了關(guān)于 Laravel 重復(fù)執(zhí)行同一個(gè)隊(duì)列任務(wù)的原因,文中通過示例代碼介紹的非常詳細(xì)
這篇文章主要給大家介紹了關(guān)于 Laravel Redis 多個(gè)進(jìn)程同時(shí)取隊(duì)列問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友下面來(lái)
主站蜘蛛池模板: 日韩欧美一区二区三区 | av天天爽 | 久久专区| 99热精品国产 | 超碰在线免费公开 | 免费观看www| 日本一区二区高清不卡 | 一区在线观看视频 | 精品在线看 | 国产精品一级 | 国产一区二区三区 | 免费国产视频在线观看 | 国产精品黄 | 九九久久精品 | 蜜桃视频一区二区三区 | a级免费黄色片 | 成人aaa视频 | 国产精品久久久久久久久久久久久久 | 亚洲日韩中文字幕一区 | 成人深夜福利网站 | 久热国产精品视频 | 色综合99| 99精品网站 | 中文字幕日韩欧美一区二区三区 | 国产精品色av | 免费一级片 | 亚洲成人精品一区二区 | 成人福利网 | 免费一区二区 | 夜夜爽99久久国产综合精品女不卡 | 老司机67194精品线观看 | 日韩黄色小视频 | 成人免费观看视频 | 一级毛片视频在线 | 91大神在线资源观看无广告 | 国产欧美在线 | 国产精品欧美一区二区三区不卡 | 亚洲精品久久久久久下一站 | 天天爽夜夜爽精品视频婷婷 | 欧美综合精品 | 日韩欧美三区 |