首先說Model吧:在TP中是一個表對應一個Model,而且普通Model中只是一些自動驗證啊,自動完成啊、還有數據字段信息啊一些東西;而CI中的Model則完全不同,一個Model不必約束于一個表,也就是說名字為abc的Model中你也可以查詢名字為def的表中的數據,而且可以定義方法完成一些數據查詢,比如我可以在名為articles_model的Model中定義一個名字為get_articles的方法來獲取所有文章信息,當某個Controller加載了這個Model后,就可以在相應的Controller中用:
$this->articles_model->get_articles();
來方便地獲取所有文章信息,而對于TP來說,這些操作只能在Action類中完成,2.0版的TP已經把View、Relation和Adv三個高級查詢model庫類定為不自動加載了,看了一下手冊,感覺除了View視圖查詢容易用一點,另外兩個都不怎么好用,感覺用起來太復雜,還不如用原生的SQL查詢.
CI的Model還有一個使我很喜歡的方法就是dbprefix方法,在使用原生的sql查詢時使用這個函數使得修改數據庫表名前綴后你的代碼不需要經過任何改動,在TP中我沒有發現類似的函數,當我用TP開發一個博客系統時,發現關聯查詢很麻煩,于是想用原生的SQL查詢,卻沒有找到自動增加數據庫表名前綴的方法,雖然可以自己修改TP的核心庫來實現,但是還是覺得這樣有點不太好.
真的要感謝TP,如果不是TP,也許我就不會去關注CI了,當我那天看了幾頁CI的英文文檔后,立馬就對它產生的深厚的興趣,于是第二天一起床就開始看CI的手冊,雖然是從官網下的英文版的,不過它的手冊寫得很簡潔、很周到,邊看邊操作,看完手冊后我就幾乎能熟練使用這個框架了,于是用它開發了一個博客系統。
CI的Model類簡單易用,TP的Model類功能相對來說要強大一些,但是用起來個人感覺沒有那么方便。
其次,對于View,從功能上講,TP的View要更加強大一些,選擇更多一些,在TP中你可以選擇就用PHP作模板引擎,可以就用TP自身的模板引擎,也可以選擇用smarty等其它第三方模板引擎,而在CI中就只能用CI內置的功能簡單的模板引擎或者用原生的PHP代碼作模板,個人覺得用PHP作模板更好一些,一來省去了學習另外的模板引擎語法的麻煩,二來執行效率更高一些,因些從View來講,選擇CI或者是TP都無所謂.
再次是Controller了,在CI中的應用的控制器是繼承自核心類Controller的,TP中的控制器則是繼承于核心類Action,不過還是有不同的,在TP中,你可以把一些公共的變量或者在多個控制器中都要執行的東西放在一個action里,假如這個action文件為CommonAction.class.php,在它的_initialize方法中可以執行一些在多個控制器中都要執行的代碼或者初始化一些多個控制器都要使用的變量,這樣,應用的其它action只要繼承CommonAction 就可以實現了.
因為框架在加載相應action時首先會自動加載那個CommonAction的,而在CI中就沒有這個方便的功能了,但是也可以自己寫一個library,在該library類的__construct方法里放一些代碼,然后在每個控制器中都加載這個library,這樣也可以實現像TP一樣的功能,不過相對來說麻煩了一些,TP還有一點比較靈活的就是,在這個控制器(action)里面可以執行那個控制器中的函數(比如用A或者R函數來實現),在CI中則不行,你不能在這個控制器中執行那個控制器中的函數,還有就是TP可以定義一個名為EmptyAction的控制器,當所有控制器都找不到時,就調用這個Empty控制器。
這一點如果與empty方法配合,可以使得URL大大縮減,雖然CI和TP都支持空操作,不過這二者的空操作名稱不相同,實現的優先級也不相同,在TP中的空操作(_empty方法)優先級是最低的,也就是說當當前控制器的所有操作都找不到時才調用這個空操作;在CI中則恰恰相反,只要存在空操作(_remap方法),該控制器的其它的操作都沒用了(不能訪問了).
新聞熱點
疑難解答
圖片精選