- 論壇徽章:
- 0
|
初品cakephp
近段時間項目挺輕松的,剛好有時間來了解一下cakephp。下面只是一己之見,初識cakephp而已,完全不保證內(nèi)容的正確性。
2.jpg (21.61 KB, 下載次數(shù): 32)
下載附件
2012-02-20 22:45 上傳
首先來看一下cakephp的的執(zhí)行流程(從百度百科借來的圖片):
1:首先你的服務(wù)器必須支持rewrite,如果是不支持rewrite的虛擬主機的話cakephp是不能正常運行的。
2:將所有的請求定向到cakephp框架后就進入了框架的route,cakephp帶有一套默認的分發(fā)規(guī)則(例如:http://……/test/test,在不做任何route配置的情況下cakephp會自動執(zhí)行test_controller控制器中的test方法)。
我們可以通過配置route的方式將任何請求指向我們所希望執(zhí)行的控制器和方法,配置如下(app/config/routes.php):
?Router::connect('/pages/*', array('controller' => 'test', 'action' => 'index'));
3:請求進入controller后cakephp會根據(jù)controller的名字去加載默認的model。例如:TestController會自動加載models下的test.php文件,接著我們就可以通過如下方法調(diào)用該model的方法了。
?$this->test->find('all');
查看cakephp框架的controller基類源碼(cake\libs\controller\controller.php的__mergeVars方法中)- ?if ($this->uses !== null && $this->uses !== false) { $merge[] = 'uses'; } foreach ($merge as $var) { if (isset($appVars[$var]) && !empty($appVars[$var]) && is_array($this->{$var})) { if ($var !== 'uses') { $normal = Set::normalize($this->{$var}); $app = Set::normalize($appVars[$var]); if ($app !== $normal) { $this->{$var} = Set::merge($app, $normal); } } else { $this->{$var} = array_merge($this->{$var}, array_diff($appVars[$var], $this->{$var})); } } }
復(fù)制代碼 在cakephp構(gòu)造controller的時候?qū)ses數(shù)組中的model會全部實例化。
4、5、6:是controller和model直接處理業(yè)務(wù)邏輯的一個過程,值得注意的是cakephp的model繼承自AppModel,在AppModel中已經(jīng)實現(xiàn)了一些數(shù)據(jù)庫的操作方法,并且model會默認關(guān)聯(lián)到數(shù)據(jù)庫中的表。這一點感覺不是很好,model只是一個數(shù)據(jù)庫的操作層了。
7:在進行完業(yè)務(wù)處理后,最終要數(shù)據(jù)要整合html輸出到瀏覽器端。在cakephp的視圖中包含布局文件、元素文件和模板文件,這些文件的在1.3版本中采用ctp的后綴,在controller基類里面可以修改var $ext = '.ctp';來改變模板文件的后綴。
小結(jié):cakephp框架使用起來感覺不夠靈活,model層存在局限性。而視圖文件中采用的是php的語法不便于團隊開發(fā)中的任務(wù)分離。在小項目中cakephp還是游刃有余的,框架提供的腳手架、核心組件和一些類可以快速方便的構(gòu)建一個項目。cakephp初識,認識可能存在偏差。
|
|