Yaf入門一之一次請求的執行流程

2021-08-15 14:26:09 字數 1471 閱讀 2351

yaf官方使用者手冊

先上一張官方執行流程圖,然後來一步步分這個流程。

第一步,啟動應用

yaf專案的入口在**?

一般是專案根目錄下的index.php,是借助於rewrite規則定位到這裡,也可以改寫。

<?php 

define

="/conf/***xx.ini");

->bootstrap()->run();

第二步,瀏覽器訪問url,路由解析url

當路由監聽到瀏覽器訪問,就會根據訪問的uri構造出乙個攜帶module,controller,action資訊的request,然後去訪問具體模組下控制器的方法。

預設情況下,我們的路由器是yaf_router, 而預設使用的路由協議是yaf_route_static。

yaf_route_static分析請求中的request_uri, 在去除掉base_uri以後, 獲取到真正的負載路由資訊的request_uri片段, 具體的策略是, 根據」/」對request_uri分段。

那麼可能有兩種情況:

當uri有3段時(/module/controller/action),yaf會認為第一段是模組名,第二段是控制器名,第三段是動作名。

當uri有2段時(/controller/action),yaf會認為是去找預設模組index,第一段被認為是控制器名,第二段是動作名。

注意:預設module是index,它的控制器是固定放在」/controllers」 目錄下的,而其他自定義的module是固定放在」/modules」 目錄下的。另外,上面路由構造request找控制器的規則,也說明了mvc 的url結構訪問的原理。

第三步,分發請求,呼叫控制器方法

路由構造出request後便關閉,接著框架會呼叫分發器的幾個hook方法(dispatchloopstartup,predispatch,postdispatch),那麼一般在postdispatch根據路由構造出來的request,去呼叫具體的控制器方法。

觸發順序

名稱觸發時機說明1

routerstartup

路由之前

觸發最早的乙個事件

2routershutdown

路由結束之後

3routerstartup

路由之前

4predispatch

分發之前

如果勤求處理過程中傳送了forward,則該事件可能觸發多次

5postdispatch

分發之後

動作執行結束,檢視渲染完成,也可能觸發多次

6dispatchloopshutdown

分發迴圈結束

所有業務邏輯已經完成,響應還未傳送

第四步,渲染檢視,響應給瀏覽器

ajax 一次請求

原始是每次切換一次選項都會發起請求,這樣會降低效率,我們可以將請求後的資料儲存下來,然後下次根據請求位址直接獲得請求內容,這樣同url每次只需請求一次。為此專門寫乙個jq外掛程式來做這件事就很有必要。外掛程式具體內容 function if options 回撥 var successfun set...

為何ajax get方式的請求只執行一次?

為何ajax get方式的請求只執行一次?主要是因為ajax存在非同步快取的問題,ie8瀏覽器快取問題導致ajax的get請求只能執行一次,ajax本身自帶有實時非同步請求的功能,而ie快取導致請求時不會請求後台,會直接讀取快取的資料。解決方法 第一種 ajax get請求時,只需將cache設定為...

一次php請求過程

1.搭建環境 1 本機虛擬機器位址192.168.100.142。虛擬機器中啟動nginx容器,php fpm容器,mysql容器,均監聽預設的埠 2 nginx容器配置檔案中通過proxy pass將php請求 到php fpm監聽的9000埠 3 為實驗專案配置網域名稱my.test.com,專...