tp6源碼解析-第二天,ThinkPHP6編譯模板流程詳解,ThinkPHP6模板源碼詳解
TP6源碼解析,ThinkPHP6模板編譯流程詳解
前言:剛開始寫博客。如果覺得本篇文章對您有所幫助。點個贊再走也不遲
模板編譯流程,大概是:
- 先獲取到View類實例(依賴注入也好,通過助手函數也好)
- 使用View編譯方法fetch或display。都會通過engine方法獲取到當前的模板驅動
- 把模板以及要編譯的數據傳入到驅動中對應的display方法或fetch方法
- display和fetch差不多(個人感覺),這倆的大致流程都是
- 判斷緩存文件失效沒,如果失效重新編譯放入緩存目錄。如果沒失效則直接讀取輸出或返回
1、app\controller\Index->Index() 控制器方法
上圖代碼所示,tp的渲染模板。默認有兩種方式,一種是調用fetch直接進行渲染。第二種就是先調用assign方法傳入要渲染的數據。然後再調用display方法進行渲染。(還有助手函數view().這裡就不過多描述了)。
2、接下來就講講tp是如何將數據渲染到模板上。並且輸出
①第一種方式
首先會調用\Think\View視圖類中的fetch方法
接下來看下getContent方法
傳入的閉包內容
追蹤到engine方法
再追蹤到tp默認視圖驅動中的fetch方法
這裡主要是編譯模板的方法 compiler。主要就是把模板內的文件都替換掉
接着回到fetch方法中
這裡是獲取到\Think\template\driver\File類實例並且將緩存文件和數據傳入到read方法中
到這裡,第一種方式流程就算是完了
第二種、display方法去渲染
追蹤到Template類中的display方法
到這裡整個流程就結束了,有興趣的可以看下我另外一篇文章