Cakephp 執(zhí)行主要流程
更新時(shí)間:2010年03月24日 20:10:21 作者:
Cakephp執(zhí)行主要流程,學(xué)習(xí)cakephp的朋友可以參考下。
加載基本文件
cake/basics.php 里面定義了常用的方法以及時(shí)間常量
$TIME_START = getMicrotime(); 記錄開始執(zhí)行時(shí)間
cake/config/paths.php 里面定義一些基本路徑
cake/lib/object.php cake的基本類
cake/lib/inflector.php 這里主要是處理單復(fù)數(shù),帶下劃開命名以及駝峰式命名
cake/lib/configure.php 里面提供文件配置的讀寫,路徑的設(shè)置,以及加載文件的方法
cake/lib/cache.php 緩存的操作
Configure::getInstance(); 開始對(duì)項(xiàng)目的配置
config/core.php 項(xiàng)目的配置文件
config/bootstrap.php 項(xiàng)目的入口文件
App::import(‘Core', array(‘Dispatcher')); 加載核心,開始做正事了,GO
$Dispatcher = new Dispatcher();
$Dispatcher->dispatch($url); 開始執(zhí)行,通過對(duì)當(dāng)前的url解析,如果你設(shè)置了壓縮Js、Css,則對(duì)這些文件壓縮輸出,如果你對(duì)頁面設(shè)置緩存,則直接輸出緩存頁面,最后查找相應(yīng)的Controller。如果找不到,則進(jìn)行相應(yīng)的錯(cuò)誤處理。
實(shí)例化當(dāng)前Controller,確定視圖路徑,實(shí)例化Component,獲得僅當(dāng)前Controller[不包含父類Controller]的方法
對(duì)當(dāng)前Controller中私有方法、帶admin路由或者帶prefix的方法進(jìn)行保護(hù),不允許直接訪問
設(shè)置當(dāng)前Controller的基本屬性,如base、here、webroot、plugin、params、action、 passedArgs[array_merge($this->params['pass'],$this->params['named'])]
調(diào)用Controller中的constructClasses方法
執(zhí)行__mergeVars方法,該方法對(duì)父子類的components、helpers、uses等屬性進(jìn)行特殊合并處理
調(diào)用Component->init()方法,載入用戶設(shè)置的系列components(Session為默認(rèn)),并默認(rèn)enabled屬性為true。(該屬性可以后期在beforeFilter里修改)
調(diào)用Component->initialize()方法,若系列components里有這個(gè)initialize方法并且該component 的enabled為true,則調(diào)用該components->initialize方法(這里enabled用戶好像無法通過 Controller設(shè)置,只能為true)
調(diào)用當(dāng)前Controller中beforeFilter()方法,這個(gè)方法是個(gè)好東西^_^
調(diào)用Component->startup()方法,同樣,若系列components里有這個(gè)startup方法并且該component的 enabled為true,則調(diào)用該components->startup方法(這里enabled倒是可以通過beforeFilter設(shè) 置),該方法也是components里最重要的方法,比如Auth就在這里大作文章^_^
開始執(zhí)行當(dāng)前Controller里的Action方法
如果設(shè)置autoRender為true,則根據(jù)調(diào)用當(dāng)前Controller的render()方法,否則返回或輸出Action方法的返回的數(shù)據(jù)
調(diào)用Controller的render()方法時(shí),先調(diào)用當(dāng)前Controller中的beforeRender()方法
加載視圖渲染類
調(diào)用Component->beforeRender()方法,同樣,若系列components里有這個(gè)beforeRender方法并且該 component的enabled為true,則調(diào)用該components->beforeRender方法(這里enabled可以通過 beforeFilter設(shè)置)
獲取當(dāng)前Model的數(shù)據(jù)驗(yàn)證錯(cuò)誤信息,給View使用
調(diào)用View的render()方法
載入相關(guān)Helper助手
調(diào)用Helper的beforeRender()方法
調(diào)用Helper的afterRender()方法
相關(guān)的緩存處理
執(zhí)行renderLayout()方法,當(dāng)然前提你要允許渲染布局,默認(rèn)為default.ctp布局文件
調(diào)用Helper的beforeLayout()方法
調(diào)用Helper的afterLayout()方法
調(diào)用Component->shutdown()方法,同樣,若系列components里有這個(gè)shutdown方法并且該component的 enabled為true,則調(diào)用該components->shutdown方法(這里enabled可以通過beforeFilter設(shè)置)
執(zhí)行當(dāng)前Controller里的afterFilter方法,這里你可以對(duì)視圖的輸出內(nèi)容($controller->output)做一些處理
返回或輸出視圖數(shù)據(jù)。
流程完畢。
cake/basics.php 里面定義了常用的方法以及時(shí)間常量
$TIME_START = getMicrotime(); 記錄開始執(zhí)行時(shí)間
cake/config/paths.php 里面定義一些基本路徑
cake/lib/object.php cake的基本類
cake/lib/inflector.php 這里主要是處理單復(fù)數(shù),帶下劃開命名以及駝峰式命名
cake/lib/configure.php 里面提供文件配置的讀寫,路徑的設(shè)置,以及加載文件的方法
cake/lib/cache.php 緩存的操作
Configure::getInstance(); 開始對(duì)項(xiàng)目的配置
config/core.php 項(xiàng)目的配置文件
config/bootstrap.php 項(xiàng)目的入口文件
App::import(‘Core', array(‘Dispatcher')); 加載核心,開始做正事了,GO
$Dispatcher = new Dispatcher();
$Dispatcher->dispatch($url); 開始執(zhí)行,通過對(duì)當(dāng)前的url解析,如果你設(shè)置了壓縮Js、Css,則對(duì)這些文件壓縮輸出,如果你對(duì)頁面設(shè)置緩存,則直接輸出緩存頁面,最后查找相應(yīng)的Controller。如果找不到,則進(jìn)行相應(yīng)的錯(cuò)誤處理。
實(shí)例化當(dāng)前Controller,確定視圖路徑,實(shí)例化Component,獲得僅當(dāng)前Controller[不包含父類Controller]的方法
對(duì)當(dāng)前Controller中私有方法、帶admin路由或者帶prefix的方法進(jìn)行保護(hù),不允許直接訪問
設(shè)置當(dāng)前Controller的基本屬性,如base、here、webroot、plugin、params、action、 passedArgs[array_merge($this->params['pass'],$this->params['named'])]
調(diào)用Controller中的constructClasses方法
執(zhí)行__mergeVars方法,該方法對(duì)父子類的components、helpers、uses等屬性進(jìn)行特殊合并處理
調(diào)用Component->init()方法,載入用戶設(shè)置的系列components(Session為默認(rèn)),并默認(rèn)enabled屬性為true。(該屬性可以后期在beforeFilter里修改)
調(diào)用Component->initialize()方法,若系列components里有這個(gè)initialize方法并且該component 的enabled為true,則調(diào)用該components->initialize方法(這里enabled用戶好像無法通過 Controller設(shè)置,只能為true)
調(diào)用當(dāng)前Controller中beforeFilter()方法,這個(gè)方法是個(gè)好東西^_^
調(diào)用Component->startup()方法,同樣,若系列components里有這個(gè)startup方法并且該component的 enabled為true,則調(diào)用該components->startup方法(這里enabled倒是可以通過beforeFilter設(shè) 置),該方法也是components里最重要的方法,比如Auth就在這里大作文章^_^
開始執(zhí)行當(dāng)前Controller里的Action方法
如果設(shè)置autoRender為true,則根據(jù)調(diào)用當(dāng)前Controller的render()方法,否則返回或輸出Action方法的返回的數(shù)據(jù)
調(diào)用Controller的render()方法時(shí),先調(diào)用當(dāng)前Controller中的beforeRender()方法
加載視圖渲染類
調(diào)用Component->beforeRender()方法,同樣,若系列components里有這個(gè)beforeRender方法并且該 component的enabled為true,則調(diào)用該components->beforeRender方法(這里enabled可以通過 beforeFilter設(shè)置)
獲取當(dāng)前Model的數(shù)據(jù)驗(yàn)證錯(cuò)誤信息,給View使用
調(diào)用View的render()方法
載入相關(guān)Helper助手
調(diào)用Helper的beforeRender()方法
調(diào)用Helper的afterRender()方法
相關(guān)的緩存處理
執(zhí)行renderLayout()方法,當(dāng)然前提你要允許渲染布局,默認(rèn)為default.ctp布局文件
調(diào)用Helper的beforeLayout()方法
調(diào)用Helper的afterLayout()方法
調(diào)用Component->shutdown()方法,同樣,若系列components里有這個(gè)shutdown方法并且該component的 enabled為true,則調(diào)用該components->shutdown方法(這里enabled可以通過beforeFilter設(shè)置)
執(zhí)行當(dāng)前Controller里的afterFilter方法,這里你可以對(duì)視圖的輸出內(nèi)容($controller->output)做一些處理
返回或輸出視圖數(shù)據(jù)。
流程完畢。
相關(guān)文章
php實(shí)現(xiàn)網(wǎng)站文件批量壓縮下載功能
這篇文章主要介紹了php實(shí)現(xiàn)網(wǎng)站文件批量壓縮下載功能,文章提供了一個(gè)將文件壓縮為zip格式的示例,感興趣的小伙伴們可以參考一下2015-10-10php實(shí)現(xiàn)求相對(duì)時(shí)間函數(shù)
這篇文章主要介紹了php實(shí)現(xiàn)求相對(duì)時(shí)間函數(shù),可實(shí)現(xiàn)簡單求相對(duì)時(shí)間為幾分鐘前或幾小時(shí)前的功能,非常簡單實(shí)用,需要的朋友可以參考下2015-06-06php socket實(shí)現(xiàn)的聊天室代碼分享
這篇文章主要介紹了php socket實(shí)現(xiàn)的聊天室代碼分享,本文實(shí)現(xiàn)代碼來自國外友人,需要的朋友可以參考下2014-08-08PHP 中檢查或過濾IP地址的實(shí)現(xiàn)代碼
網(wǎng)絡(luò)環(huán)境異常復(fù)雜,有時(shí)候我們不得不禁止一些惡意用戶訪問,禁止的方式有很多種,其中一種就是通過 IP 來限制,本文提供的方法允許你通過 IP 區(qū)間、CIDR (Classless Inter-Domain Routing)及單個(gè) IP 格式來檢查或過濾 IP 地址2011-11-11比較全的PHP 會(huì)話(session 時(shí)間設(shè)定)使用入門代碼
由于 Session 是以文本文件形式存儲(chǔ)在服務(wù)器端的,所以不怕客戶端修改 Session 內(nèi)容。實(shí)際上在服務(wù)器端的 Session 文件,PHP 自動(dòng)修改 Session 文件的權(quán)限,只保留了系統(tǒng)讀和寫權(quán)限,而且不能通過 ftp 修改,所以安全得多。2008-06-06PHP文件操作實(shí)例總結(jié)【文件上傳、下載、分頁】
這篇文章主要介紹了PHP文件操作,結(jié)合實(shí)例形式總結(jié)分析了php針對(duì)文件的上傳、下載、分頁等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-12-12PHP計(jì)算個(gè)人所得稅示例【不使用速算扣除數(shù)】
這篇文章主要介紹了PHP計(jì)算個(gè)人所得稅,結(jié)合實(shí)例形式分析了php自定義函數(shù)不使用速算扣除數(shù)計(jì)算個(gè)人所得稅的相關(guān)操作技巧,涉及數(shù)組遍歷、數(shù)值運(yùn)算的簡單使用,需要的朋友可以參考下2018-03-03