php $app-run(),Thinkphp 5.x 应用启动 App::run()
在上文加載完配置等一系列工作之后,進(jìn)入App::run(),在run()方法中,
首先通過自動加載機(jī)制拿到 Request 的一個實例
接著 $config = self::initCommon()初始化公共配置,先是 addNamespace 添加app當(dāng)前所在的命名空間,然后 進(jìn)行 self::init()初始化,跟進(jìn)去
它會進(jìn)行加載默認(rèn)的application下的config.php配置文件、database.php數(shù)據(jù)庫配置文件
還會讀取額外的application\extra\ 下的配置文件、加載公共文件等等操作
最后又會調(diào)用 Config::get(),將其配置參數(shù)全部放入到數(shù)組中
然后回到 self::initCommon 函數(shù)中繼續(xù)往下走,就是檢查參數(shù)、加載額外需要的文件等等
回到 原來的run函數(shù)中繼續(xù)往下走,先是進(jìn)行 模塊/控制器綁定操作,這里默認(rèn) BIND_MODULE 沒定義 所以不走
然后往下走來到$dispatch = self::routeCheck($request, $config);,功能是URL 路由檢測 跟進(jìn)
進(jìn)入了,先來到path方法,獲取你的訪問路徑index/index/index
然后接著開始 路由的判斷
默認(rèn)runtime目錄下沒有路由的緩存文件,然后就就會去包含application目錄下的route.php文件
接著進(jìn)行路由的檢測 進(jìn)入到 check 方法中
在check方法中,先對你的路由路徑index/index/index 中的 ‘/ ‘進(jìn)行 ‘|‘ 替換處理
接著進(jìn)入 $request->method 方法中 對該路由請求的方式為哪種類型,最后走的是如下
繼續(xù)跟進(jìn)它會獲取服務(wù)器的$_SERVER的變量,然后調(diào)用input方法
看起來是獲取 REQUEST_METHOD 中的值
然后又調(diào)用 getFilter 方法,來獲取全局過濾的規(guī)則
上面獲取完全局過濾的規(guī)則之后,就開始進(jìn)行過濾操作
到這里 又回到了 check方法中,上面完成了 獲取了 請求類型的路由規(guī)則 和 http的請求方式 和 請求的路徑
然后接著開始進(jìn)行 URL綁定,默認(rèn)為空
這里接著把剛才 | 替換為 /
然后這里就走出了check方法,最后來到了 parseUrl 方法中, 該方法 實現(xiàn)的功能
先進(jìn)入parseUrlPath這個方法,對 路由方法的分割,比如這里是Index/index/index,那么就如下返回
然后解析 模塊 控制器 動作 以及 所帶的參數(shù)
最后返回解析完的數(shù)據(jù)
到現(xiàn)在 已經(jīng)是 回到了 app->run 的主方法中 routeCheck 的方法,所以 自己看來可以理解為就是對 路徑的訪問 路由方式的判斷 解析 模塊 控制器 動作 以及 所帶的參數(shù)的操作!
到這里在App::run()方法中已經(jīng)執(zhí)行了一般了,主要的 initCommon routeCheck 兩個方法都執(zhí)行過了
現(xiàn)在繼續(xù)執(zhí)行的就是 exec 方法
到目前,前面得了 routeCheck 方法 會把結(jié)果放在 $dispatch中
然后進(jìn)入 exec方法中,該方法會根據(jù) $dispatch[‘type‘] 判斷,這里是 module,那么走 module 的分支 module()方法
module() 該方法主要的操作就是 初始化模塊
來到其中的 init 方法 ,流程就是 先根據(jù)模塊 定位模塊的目錄 然后加載 當(dāng)前模塊目錄下的 config.php文件
然后加載 當(dāng)前模塊目錄下的 config.php文件
接著讀取數(shù)據(jù)庫配置文件等等
然后出$request->module方法 重新來到 exec 中module方法 中,接著獲取控制器名
再獲取操作名
再整合 控制器和動作
接著再次獲取動作名
最后開始調(diào)用
真正調(diào)用Action的函數(shù)
最后在exec中返回調(diào)用返回來的數(shù)據(jù)$data
通過該Response創(chuàng)建,然后最后echo
到這里完整的一次http請求就結(jié)束了!
原文:https://www.cnblogs.com/zpchcbd/p/12563157.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的php $app-run(),Thinkphp 5.x 应用启动 App::run()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BugkuCTF-Crypto题Crac
- 下一篇: 动态规划算法php,php算法学习之动态