|
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ì)頁(yè)面設(shè)置緩存,則直接輸出緩存頁(yè)面,最后查找相應(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ù)。
流程完畢。
php技術(shù):Cakephp 執(zhí)行主要流程,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。