① php的tq框架中,的model類,controller類,和view類都有什麼用代碼都應該寫在
MVC概念來自傳統的桌面軟體開發,在那樣的環境下,事件發生時,Model可以主動通知View,而這在HTTP協議里是不可能的(長連接comet除外啊)。長期以來,PHP業界對MVC框架中M和C的理解和運用都是不精細的(當然,夠用就好,能滿足絕大多數業務了)。這導致MC分層不清,PHPer在寫代碼的時候沒有明確的規則,到底業務邏輯放在C里還是M里,常見的問題有:
C層承擔職責過多,如,贊一個答案是給對應回答者加聲望,寫到C裡面去了
M層太單薄,就繼承一下框架的Model(或者DB類),實現資料庫的增刪查改
非資料庫操作(如調用微博OpenAPI)只好包裝到Util類
用戶輸入($_GET,$_POST)全局亂跑,M層和Util里都有
由於大部分場景下,PHP都用來做Web應用,而且是Database Driven Application,所以,各類Database Driven的快速開發框架也應運而生,比如說,CakePHP的Model類乾脆就定義了CURD幾個針對數據表的操作,Qcodo直接根據數據表結構自動生成MVC三層的腳手架代碼。
我理解的PHP應用是5層結構,M層應再拆分為Biz Model,DAO,Infrastructure,貼幾幅圖片
② thinkphp 模型類的作用
一般情況下是一個表對應一個model類,不用也是可以的。
至於你說的簡化代碼,給你舉個例子:
比如說你有一個user表,裡面有 id name pass time(登錄時間),對其的操作頁面有注冊,登錄,修改密碼等等
如果你要使用M來進行實例的話,不管是注冊還是幹啥,你每次都要對提交過來的信息是否合法進行一個驗證,time時間每次都要使用time()函數來重新生成以下
但是如果你使用了model,使用D來實例化,這些信息的驗證,和time()的完成都可以寫到model中,就不用在上面說的那些頁面當中一一進行操作驗證或者添加了。
classUserModelextendsModel
{
//使用下面的這些可以很方面對user表進行操作,省去了多次對表進行操作時候所書寫的驗證和完成之類的代碼。
//自動驗證
protected$_validate=array(
array('name','require','用戶名不能為空'),
array('name','','用戶名已存在',0,'unique',1),
array('user_pwd','require','新密碼不能是空',0,'',2),//只更新時驗證
);
//自動完成
protected$_auto=array(
array('addtime','time',1,'function'),
);
//上面的一些規則可以參考自動完成和自動驗證的規則,需要調用函數的時候,在下面自己再添加自定義的函數
}