日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

php $app-run(),Thinkphp 5.x 应用启动 App::run()

發(fā)布時間:2024/9/27 php 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php $app-run(),Thinkphp 5.x 应用启动 App::run() 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在上文加載完配置等一系列工作之后,進(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。