<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                請求流程 在應用初始化結束之后,框架運行所具備的基本功能就加載結束了。然后就應該是處理用戶請求了。首先我們應該看的就是流程。 if (is_file($this->app->getBasePath() . 'middleware.php')) { $this->app->middleware->import(include $this->app->getBasePath() . 'middleware.php'); } if ($this->multi) { $this->parseMultiApp(); } $this->app->event->withEvent($this->app->config->get('app.with_event', true)); $this->app->event->trigger('HttpRun'); $withRoute = $this->app->config->get('app.with_route', true) ? function () { $this->loadRoutes(); } : null; return $this->app->route->dispatch($request, $withRoute); 加載全局中間件 app/middleware.php, 默認這些都是關閉的 多應用處理 設置事件監聽并且監聽 httpRun 事件 加載路由,有一個需要注意的就是框架支持注解路由。默認關閉 分發請求 ## **請求流程** 對于一個HTTP應用來說,從用戶發起請求到響應輸出結束,大致的標準請求流程如下: * 訪問入口文件index.php 同時 載入`Composer`的自動加載`autoload`文件 * 入口文件實例化系統應用基礎類`think\App` * * **1、$http=new think\App->http;** * **2、$response=$http->run();** * ① $this->runWithRequest($request) #將請求信息對象傳入 * $this->initialize() * $this->app->initialize(); * 加載全局中間件(app/middleware.php) * 解析多應用 $this->parseMultiApp() * 設置開啟事件機制 * 監聽HttpRun ($this->app->event->trigger('HttpRun');) * app.with_route為true則閉包函數加載路由配置文件($this->loadRoutes();) * $routePath = $this->getRoutePath();確定加載路徑 如:"D:\phpStudy\WWW\tp6\route\admin\" * $files = glob($routePath . '*.php'); //加載routePath所有的.php后綴的路由配置文件 $files = glob($routePath . '*.php'); * 觸發 監聽 RouteLoaded事件 * return $this->app->route->dispatch($request, $withRoute);//路由調度參數:$withRoute為包含加載路由文件的比好函數或者null; $withRoute();執行此閉包函數 * return $this->check();//檢測URL路由 * ... * ② return $response->setCookie($this->app->cookie); * **3、$response->send()** * **4、$http->end($response);** * 獲取應用目錄等相關路徑信息 * 加載全局的服務提供`provider.php`文件 * 設置容器實例及應用對象實例,確保當前容器對象唯一 * 從容器中獲取`HTTP`應用類`think\Http` * 執行`HTTP`應用類的`run`方法啟動一個`HTTP`應用 * 獲取當前請求對象實例(默認為`app\Request`繼承`think\Request`)保存到容器 * 執行`think\App`類的初始化方法`initialize` * 加載環境變量文件`.env`和全局初始化文件 * 加載全局公共文件、系統助手函數、全局配置文件、全局事件定義和全局服務定義 * 判斷應用模式(調試或者部署模式) * 監聽`AppInit`事件 * 注冊異常處理 * 服務注冊 * 啟動注冊的服務 * 加載全局中間件定義 * 如果是多應用模式則解析當前實際訪問的應用名 * 自動多應用識別,檢查域名綁定應用和應用映射及禁止訪問列表 * 加載應用公共文件、應用配置文件、應用事件定義、應用中間件定義和應用服務提供定義 * 設置當前應用的命名空間 * 監聽`HttpRun`事件 * 執行路由調度(`Route`類`dispatch`方法) * 如果開啟路由則檢查路由緩存 * 加載路由定義 * 如果開啟注解路由則檢測注解路由 * 路由檢測(中間流程很復雜 略) * 路由調度對象`think\route\Dispatch`初始化 * 設置當前請求的控制器和操作名 * 注冊路由中間件 * 綁定數據模型 * 設置路由額外參數 * 執行數據自動驗證 * 執行路由調度子類的`exec`方法返回響應`think\Response`對象 * 獲取當前請求的控制器對象實例 * 利用反射機制注冊控制器中間件 * 執行控制器方法以及前后置中間件 * 執行當前響應對象的`send`方法輸出 * 執行HTTP應用對象的`end`方法善后 * 監聽`HttpEnd`事件 * 寫入當前請求的日志信息 * 本地化當前請求的會話數據 至此,當前請求流程結束。 * 載入`Composer`的自動加載`autoload`文件【index.php】 * 實例化系統應用基礎類`think\App`【index.php】 * 獲取應用目錄等相關路徑信息【App.php<==>APP::__construct】 * 加載全局的服務提供`provider.php`文件【App.php<==>APP::__construct】 * 設置容器實例及應用對象實例,確保當前容器對象唯一【App.php<==>APP::__construct】 * 從容器中獲取`HTTP`應用類`think\Http`【index.php】 * 執行`HTTP`應用類的`run`方法啟動一個`HTTP`應用【index.php】 * 獲取當前請求對象實例(默認為`app\Request`繼承`think\Request`)保存到容器【vendor\topthink\framework\src\think\Http.php《==》Http::run】 * 執行`think\App`類的初始化方法`initialize`【Http::runWithRequest】 * 加載環境變量文件`.env`和全局初始化文件【App::initialize】 * ~~加載全局公共文件、系統助手函數、全局配置文件、全局事件定義和全局服務定義~~【App::initialize】 * 判斷應用模式(在App::debugModeInit讀取并根據配置文件啟用調試或者部署模式)【App::initialize】 * 加載全局初始化文件(common.php/helper.php/所有配置文件/event.php/service.php) * 加載應用默認語言包 * 監聽`AppInit`事件【App::initialize】 * 應用初始化器遍歷initializers屬性并實例化下面三個類 * 注冊異常處理【Error:init】vendor\\topthink\\framework\\src\\think\\initializer\\Error.php * 服務注冊【RegisterService:;init】vendor\\topthink\\framework\\src\\think\\initializer\\RegisterService.php * vendor\\topthink\\framework\\src\\think\\service\\PaginatorService.php * vendor\\topthink\\framework\\src\\think\\Service.php * vendor\\topthink\\framework\\src\\think\\service\\ValidateService.php * vendor\\topthink\\framework\\src\\think\\service\\ValidateService.php * 啟動注冊的服務【BootService::init】endor\\topthink\\framework\\src\\think\\initializer\\BootService.php * 加載全局中間件定義【Http::runWithRequest】 * 開啟事件機制【Http::runWithRequest】 * 監聽`HttpRun`事件【Http::runWithRequest】 * 執行全局中間件【Http::runWithRequest】 * 執行路由調度(主要是調用`Route`類`dispatch`方法)【Http::dispatchToRoute】 * 如果app.with_route配置開啟路由 則檢查路由緩存【Route::dispatchToRoute】 * 執行Http::loadRoutes方法加載路由定義【Route::dispatchToRoute】 * 監聽`RouteLoaded`事件【Route::loadRoutes】 * 初始化默認域名【Route::__construct】 * 讀取路由映射文件【Route::__construct】 * 如果開啟注解路由則檢測注解路由(route_annotation配置)??? * Route::check路由檢測(中間流程很復雜 略)【Route::dispatch】 * $dispatch->run() 路由調度對象`think\route\Dispatch`初始化【Route::dispatch】 * 設置當前請求的控制器和操作名 * 注冊路由中間件【Route::init】 * 綁定數據模型 * 設置路由額外參數 * 執行數據自動驗證 * 執行路由調度子類的`exec`方法返回響應`think\Response`對象【Dispatch::run】 * 獲取當前請求的控制器對象實例`vendor\topthink\framework\src\think\route\dispatch\Controller.php下的Controller::exe()` * 利用反射機制注冊控制器中間件`同上:Controller::exe()` * 執行控制器方法以及前后置中間件`同上:Controller::exe()` * 執行當前響應對象的`send`方法輸出【index.php】 * 執行HTTP應用對象的`end`方法善后【index.php】 * 監聽`HttpEnd`事件 * 執行中間件的`end`回調 * 寫入當前請求的日志信息
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看