ThinkPHP開發指南(二)高級特性-thinkphp

ThinkPHP後臺治理具備項目自動創建的功能,首先確保後臺治理項目運行正常。
自動創建的作用是根據節點治理裏面添加的項目名稱自動創建項目的目錄結構、進口文件、配置文件等,免往了手動創建衆多目錄和文件的麻煩。
要使用自動創建功能,請確認你的網站根目錄具有可寫權限。
然後,在後臺的節點治理添加項目節點,添加成功後,在列表的操縱部分點擊創建連接,系統就會自動創建項目目錄結構,並把後臺治理的配置文件複製到添加的項目中,假如需要修改,請手動進行修改。
留意:
爲了安全,在後臺刪除項目並不會刪除項目目錄結構,假如需要,請手動對目錄結構進行刪除操縱。
模塊自動天生
ThinkPHP後臺治理具備自動天生模塊的功能,條件是你已經爲模塊創建好了相應的符合配置要求的數據表。
這一功能比較適合功能單一的模塊操縱,Action類、Dao類和Vo類均使用同名數據表。
要自動創建模塊,請首先在節點治理裏面添加模塊節點,然後點擊創建連接自動創建模塊。
模塊自動天生的文件包括,項目的Action類(沒有任何操縱方法)、Dao類(沒有任何方法,直接繼續Dao類)和Vo類(已經包含數據表對應字段的屬性定義),以及模版的模塊目錄。
請放心,假如已經存在創建好的項目類庫文件,系統不會再次重新天生。
表單驗證類表單驗證類
ThinkPHP內置了表單驗證類來提供對錶單提交的數據進行驗證,這裏指的是後臺驗證,而不是客戶真個驗證,客戶端驗證請參考Js類庫的CheckForm類。
表單驗證類位於ORG.Text.Validation,通過正則的方式對數據進行驗證,並定義了一些常用的驗證規則。
包括:
1. require 字段必須
2. email 郵箱
3. phone 電話號碼
4. mobile 手機號碼
5. url URL地址
6. currency 貨幣
7. number 數字
8. zip 郵政編碼
9. qq QQ號碼
10. integer 整數
11. double 浮點數
12. english 英文
13. chinese 中文
14. username 用戶名
15. password 密碼
驗證類的使用方法:
複製PHP內容到剪貼板 PHP代碼:import(ORG.Text.Validation);
$validation = Validation: :getInstance();
if(!$validation->check($_POST[\'username\'],\’username\’)) {
$this->error(\’用戶名不符合規範!\’);
}
使用自定義的正則式驗證 複製PHP內容到剪貼板 PHP代碼:if(!$validation->check($_POST[\'name\'],\’/^[a-z]w{4,}$/i\’)) {
$this->error( \’用戶名必須是以字母打頭,且5位以上!\’);
}
在ThinkPHP框架中,你還可以單獨定義一個_validation方法,用來對錶單數據進行驗證。
系統在執行操縱之前,會檢查該模塊是否存在_validation方法,假如存在,會自動調用進行驗證。
一個典型的_validation方法定義如下,當驗證沒有通過的時候,系統會返回$this->error信息給客戶端。
複製PHP內容到剪貼板 PHP代碼:function _validation()
{
$validation = Validation: :getInstance();
//對所有需要驗證的數據進行驗證
if(isset($_POST[\'name\'])) {
if(!$validation->check($_POST[\'name\'],\’require\’)) {
$this->error = \’用戶名必須\’;
return false;
}
}
if(isset($_POST[\'password\']) ) {
if(!$validation->check($_POST[\'password\'],\’require\’)) {
$this->error = \’密碼有誤\’;
return false;
}
}
return true;
}
Vo自動驗證ThinkPHP還支持Vo自動驗證,可以無需定義_validation方法來進行驗證,只需要在Vo類定義的時候使用_validation屬性定義需要驗證的屬性,在表單提交的時候系統會完成自動驗證過程。
Vo類的_validation屬性定義格式如下:
複製PHP內容到剪貼板 PHP代碼:var $_validate = array(
array(content,require,內容不能爲空),
array(email,email,Email格式錯誤),
array(userId,/^d+$/,必須是數字),
);
_validate 屬性是一個二維數組,每個元素定義了一個驗證因子,由三個元素組成且必須,第一個元素是要驗證的屬性名,第二個元素是驗證規則,支持定義規則和正則,第三個元素是出錯提示信息。
系統會在根據表單提交數據創建Vo對象的時候自動對_validate 定義的內容進行驗證。
例如:
複製PHP內容到剪貼板 PHP代碼:$dao = D(Blog);
$vo = $dao->createVo();
if(false === $vo) {
$this->error($dao->error);
}
Vo自動填充在Vo類定義 $_auto 屬性,可以完成Vo自動填充功能,用來處理默認值和其他系統寫進字段。
定義方法:
複製PHP內容到剪貼板 PHP代碼:var $_auto = array (
array(\’status\’,\’1\’,\’ADD\’),
array(\’mTime\’,\’time\’,\’UPDATE\’),
array(\’type\’,\’0\’,\’ALL\’),
);
每個自動填充項是一個數組,依次代表 字段名稱、填充值和填充類型(ALL 始終 ADD 新增時填充 UPDATE 更新時填充)。
填充類型留空默認表示ADD。
在使用Dao的CreateVo方法創建Vo對象的時候,假如存在_auto定義,就會進行自動填充。
填充值假如是函數就填充函數返回值,否則就按照字符串填充。
PS:
該自動填充可能會覆蓋表單提交項目。
其目的是爲了防止表單非法提交字段。
前置和後置操縱通用前置和後置操縱
在ThinkPHP中,你可以給任何一個操縱定義前置和後置操縱方法。
前置操縱的定義就是在當前操縱方法的前面添加_before_前綴,而後置操縱的定義就是在當前操縱方法的前面添加_after_前綴。
例如,我們已經給UserAction定義了一個del操縱方法,我們可以定義:
_before_del() 在del操縱之前執行
_after_del() 在del操縱之後執行(del操縱正常執行完畢)
內置前置和後置操縱
另外,假如使用系統內置的insert和update操縱的話,會首先檢查是否存在_operation方法,這個方法是系統在表單提交時候的默認前置操縱。
_operation方法沒有任何參數,主要是用來檢測表單的提交數據。
在insert或者update執行完畢後,系統會檢查是否存在_trigger方法,這個方法是系統默認的數據更新觸發器方法。
_trigger方法只有一個參數,也就是要保存的Vo對象。
列表過濾方法
假如你使用系統內置的index方法,系統還會檢查_filter方法,該方法負責對列表數據進行過濾,當你的列表需要針對不同的用戶進行判定和過濾的時候,這個方法非常有效。
分頁類使用ThinkPHP內置了分頁類,位於 ORG.Util.Page ,使用舉例:
複製PHP內容到剪貼板 PHP代碼:$dao = D(\’User\’);
$count = $dao->getCount();
import(ORG.Util.Page);
if(!empty($_REQUEST[\'listRows\'])) {
$listRows = $_REQUEST[\'listRows\'];
}else{
$listRows=4;
}
$p= new Page($count,$listRows);
$list=$dao->findAll(\’\',\’\',\’*\’,\’id asc\’,$p->firstRow.\’,\’.$p->listRows);
$page= $p->show();
$this->assign(page,$page);
$this->assign(userList,$list);
在模版文件中,使用標籤 複製PHP內容到剪貼板 PHP代碼:{$page}
就可用輸出分頁
顯示效果
其中每頁顯示的記錄數、頁數等信息均可以修改。
假如需要定製分頁的顯示,可以使用下面的方式輸出分頁 複製PHP內容到剪貼板 PHP代碼:$page= $p->show(true);
$this->assign(page,$page);
然後,在模版文件裏面自己添加下面的變量
1. $page[\'totalRows\'] // 總的記錄數
2. $page[\'upPage\'] // 上一頁鏈接
3. $page[\'downPage\'] // 下一頁鏈接
4. $page[\'totalPages\'] // 總頁數
5. $page[\'firstPage\'] // 第一頁鏈接
6. $page[\'endPage\'] // 最後一頁鏈接
7. $page[\'nextPages\'] //下一個鏈接頁(比如說設置每頁顯示5頁鏈接,這裏指的是下一個5頁)
8. $page[\'prePages\'] // 上一個鏈接頁
9. $page[\'linkPages\'] // 當前鏈接頁
10. $page[\'nowPage\'] // 當前頁
不過,目前這種方式還是存在一定不足,更好的方式是自己擴展一個Page類來定製輸出。
關聯查詢操縱關於ThinkPHP的關聯查詢支持。
目前支持的表間關聯方式包括三種:
1、ONE_TO_ONE ( 包括HAS_ONE 和 BELONGS_TO )
2、ONE_TO_MANY( 包括HAS_MANY 和 BELONGS_TO)
3、MANY_TO_MANY
Dao類增加了一個xfind() 方法用於直接獲取帶關聯記錄的返回結果,而 getRelation() 方法用於獲取已經返回記錄的關聯記錄(集)。
xfind的參數和find方法保持不變,區別在於xfind方法會一起返回關聯記錄,而find方法默認不返回關聯記錄。
find方法最後增加了一個relation參數,用以控制是否進行關聯查詢。
xfind方法僅僅是find方法的一個引用。
relation參數支持false(不進行關聯查詢)、true(進行所有關聯查詢)和array(只查詢某個關聯)。
舉例:
複製PHP內容到剪貼板 PHP代碼:$dao->find(id=2); // 返回id爲2的記錄
$dao->xfind(id=2); // 返回id爲2的記錄,並同時返回其關聯記錄(假如有定義)
假如不是使用find方法進行查詢,可以配合getRelation方法進行關聯記錄的查詢。
例如:
複製PHP內容到剪貼板 PHP代碼:$user = $dao->getById($id);
$user = $dao->getRelation($user);
// 或者使用下面的方法
$user = $dao->getById($id,\’\',\’*\’,\’\',true);
同樣,增加了xFindAll方法進行關聯查詢(返回Volist對象),而findAll方法默認不進行關聯查詢。
例如:
複製PHP內容到剪貼板 PHP代碼:$list = $dao->findAll(type=1); //查詢type爲1的用戶
$list = $dao->xFindAll(type=1); // 查詢並返回關聯記錄
關聯查詢需要Vo類定義_link 屬性配合,例如UserVo中定義如下關聯信息:
複製PHP內容到剪貼板 PHP代碼:var $_link = array(
// 每個用戶都有一個個人檔案
array( \’mapping_type\’=>HAS_ONE,
\’class_name\’=>\’Profile\’,
\’foreign_key\’=>\’userId\’,
\’mapping_name\’=>\’profile\’,
),
// 每個用戶有多個文章
array( \’mapping_type\’=>HAS_MANY,
\’class_name\’=>\’Article\’,
\’foreign_key\’=>\’userId\’,
\’mapping_name\’=>\’articles\’,
\’mapping_order\’=>\’cTime desc\’),
// 每個用戶都屬於一個部分
array( \’mapping_type\’=>BELONGS_TO,
\’class_name\’=>\’Dept\’,
\’foreign_key\’=>\’userId\’,
\’mapping_name\’=>\’dept\’),
// 每個用戶可以屬於多個組,每個組可以有多個用戶
array( \’mapping_type\’=>MANY_TO_MANY,
\’class_name\’=>\’Group\’,
\’mapping_name\’=>\’groups\’,
\’foreign_key\’=>\’userId\’,
\’relation_foreign_key\’=>\’goupId\’,
\’relation_table\’=>\’think_gourpUser\’)
);
而getRelation方法,則用於獲取已經查詢到的Vo對象的某個關聯記錄 複製PHP內容到剪貼板 PHP代碼:$vo = $dao->getRelation($vo,HAS_MANY,\’articles\’);
關於映射關係的定義,還有一些高級默認規則,除了mapping_type、class_name 和mapping_name 三個屬性必須外,其他都是可選的。
另外,還可以包括mapping_order、condition、mapping_limit等高級屬性。
默認規則
外鍵的默認規則是當前Vo對象名稱+id,例如:
UserVo對應的可能是表think_user (留意:
think只是一個表前綴,可以隨意配置)
那麼think_user表的外鍵默以爲 user_id,假如不是,就必須在定義表間映射關係的時候定義 foreign_key 。
同樣的道理,對於多對多的情況,relation_foreign_key 的規則相同。
多對多的中間表默認表規則如下:
假如think_user 和 think_group 存在一個對應的中間表,默認的表名應該是
假如是由group來操縱關聯表,中間表應該是 think_group_user,假如是從user表來操縱,那麼應該是think_user_group,也就是說,多對多關聯的設置,必須有一個Vo類裏面需要顯式定義中間表,否則雙向操縱會出錯。
中間表無需另外的id主鍵(但是這並不影響中間表的操縱),通常只是由 user_id 和 group_id 構成。
另外一個潛規則,由於表間映射關係可以定義condition屬性,通常都是通過外鍵來獲取關聯數據,但是假如你定義了condition屬性,那麼就會重新使用condition的條件來獲取關聯表的數據。
在HAS_MANY 和MANY_TO_MANY情況下,可以使用mapping_order 和 mapping_limit 進行記錄的排序和獲取部分數據。
HAS_ONE 和 BELONGS_TO 永遠都只會返回最多一條記錄。
另外除了MANY_TO_MANY之外,其他映射關係可以使用 mapping_fields 來返回你需要的關聯表字段。
關於自引用關聯
假如Vo類的_link屬性裏面對於 class_name 爲自身的情況就屬於自引用關聯。
通常用於從屬關係的關聯,例如,某個用戶是另外一個用戶的領導,某個節點下面有多個子節點這樣的應用情況。
對於這樣的情況,ThinkPHP增加了一個parent_key屬性來定義,該屬性在自引用方式下面有效。
例如NodeVo中有如下定義:
複製PHP內容到剪貼板 PHP代碼://每個節點具有多個子節點
var $_link = array(
array( \’mapping_type\’=>HAS_MANY,
\’class_name\’=>\’Node\’,
\’foreign_key\’=>\’id\’,
\’parent_key\’=>\’pid\’,
\’mapping_name\’=>\’sub\’,
\’mapping_order\’=>\’seqNo asc\’),
);
parent_key 默認名稱爲parent_id,假如不是則需要指定。
權限控制ThinkPHP以基於Spring的Acegi安全系統作爲參考原型,並做了簡化,以適合目前的ThinkPHP結構,提供了一個多層的、可定製的安全體系來爲應用開發提供安全控制。
安全體系中主要有:
安全攔截器
認證治理器
決策訪問治理器
運行身份治理器
安全攔截器
安全攔截器就比如一道道門,在系統的安全防護系統中可能存在很多不同的安全控制環節,一旦某個環節你未通過安全體系認證,那麼安全攔截器就會實施攔截。
認證治理器
防護體系的第一道門就是認證治理器,認證治理器負責決定你是誰,一般它通過驗證你的主體(通常是一個用戶名)和你的憑證(通常是一個密碼),或者更多的資料來做到。
更簡單的說,認證治理器驗證你的身份是否在安全防護體系授權範圍之內。
訪問決策治理
固然通過了認證治理器的身份驗證,但是並不代表你可以在系統裏面肆意妄爲,由於你還需要通過訪問決策治理這道門。
訪問決策治理器對用戶進行授權,通過考慮你的身份認證信息和與受保護資源關聯的安全屬性決定是是否可以進進系統的某個模塊,和進行某項操縱。
例如,安全規則規定只有主管才答應訪問某個模塊,而你並沒有被授予主管權限,那麼安全攔截器會攔截你的訪問操縱。
決策訪問治理器不能單獨運行,必須首先依靠認證治理器進行身份確認,因此,在加載訪問決策過濾器的時候已經包含了認證治理器和決策訪問治理器。
爲了滿足應用的不同需要,ThinkPHP在進行訪問決策治理的時候採用兩種模式:
登錄模式和即時模式。
登錄模式,系統在用戶登錄的時候讀取改用戶所具備的授權信息到Session,下次不再重新獲取授權信息。
也就是說即使治理員對該用戶進行了權限修改,用戶也必須在下次登錄後才能生效。
即時模式就是爲了解決上面的題目,在每次訪問系統的模塊或者操縱時候,進行即使驗證該用戶是否具有該模塊和操縱的授權,從更高程度上保障了系統的安全。
運行身份治理器
運行身份治理器的用處在大多數應用系統中是有限的,例如某個操縱和模塊需要多個身份的安全需求,運行身份治理器可以用另一個身份替換你目前的身份,從而答應你訪問應用系統內部更深處的受保護對象。
這一層安全體系目前的RBAC插件中尚未實現。
早先RBAC組件是集成在ThinkPHP框架中的,從0.9版本引進了插件機制後,已經把RBAC組件轉換成插件使用,以方便用戶替換或者擴展,而且在調用接口上也更加方便。
要啓用RBAC插件,請在項目配置文件_appConfig.php(請留意:
項目配置文件名是以App命名的支持多種格式,運行時候系統會自動天生一個定義文件,最新的版本中自動天生的定義文件名是_appConfig.php ,請留意更新) 中設置
USER_AUTH_ON 爲True
並設置認證類型USER_AUTH_TYPE
1 普通認證(認證一次)
2 高級認證(實時認證)
不設置默以爲1
認證識別名USER_AUTH_KEY 是用於檢查用戶是否經過身份認證的標識,一旦用戶經過系統認證,系統會把該用戶編號保存在$_SESSION[USER_AUTH_KEY]中
爲了滿足應用系統的需要,RBAC插件中可以設置
REQUIRE_AUTH_MODULE 需要認證的模塊
NOT_AUTH_MODULE 無需認證的模塊
多個模塊之間用逗號分割
假如某個模塊需要認證,但是用戶還沒有經過身份認證,就會跳轉到
USER_AUTH_GATEWAY 認證網關,例如 /Public/login
驗證地址就是:
項目進口文件URL地址/Public/login
假設認證網關的驗證操縱地址是/Public/CheckLogin,可以在public模塊的checkLogin操縱中採用如下方式進行認證:
<?php
// 天生認證Map條件
// 這裏使用用戶名、密碼和狀態的方式進行認證
$map = new HashMap();
$map->put(name,$_POST[\'name\']);
$map->put(password,$_POST[\'password\']);
$map->put(status,1);
$authInfo = RBAC: : authenticate($map);
if(false === $authInfo) {
$this->assign(\’error\’,\’登錄失敗,請檢查用戶名和密碼是否有誤!\’);
}else {
// 設置認證識別名
Session: :set(USER_AUTH_KEY,$authInfo->id);
//獲取並保存用戶訪問權限列表
RBAC: :saveAccessList();
// 登錄成功,頁面跳轉
$this->assign(message,\’登錄成功!\’);
$this->assign(jumpUrl,\’http://www.topthink.com.cn\’);
}
$this->forward();
?>
RBAC的委託認證方法
authenticate($map,$dao=\’UserDao\’,$provider=USER_AUTH_PROVIDER)
方法是靜態方法,支持三個參數,其中第一個認證條件$map是必須的,可以靈活地控制需要認證的字段。
第二個參數是進行認證的Dao類,默認是UserDao類
第三個參數是委託方式 由 USER_AUTH_PROVIDER 設置委託認證治理器的委託方式,目前支持的是 DaoAuthentictionProvider 通過數據庫進行認證。
在應用系統的開發過程中,只需要設置相關的配置項和添加上面的認證方法,其他的認證和決策訪問就由RBAC插件的AccessDecision方法自動完成了。
系統會在執行某個模塊的操縱時候,首先判定該模塊是否需要認證,假如需要認證並且已經登錄,就會獲取當前用戶的權限列表判定是否具有當前模塊確當前操縱權限,並進行相應的提示。
接下來就是在框架總後臺設置相關項目的模塊和操縱權限了。
首先,在總治理後臺(ThinkPHP自帶的Admin項目)的節點治理添加相關項目、模塊和操縱,作爲權限治理的節點。
假如需要設置公共的操縱,可以使用Public模塊,所有屬於Public模塊的操縱對所有模塊都有效。
添加完成項目治理節點後,就在權限治理裏面對某個用戶組設置相關權限(包括項目權限、模塊權限和操縱權限)
以後需要授權就把用戶添加到某個權限組就可以了,同一個用戶可以屬於多個權限組。
授權和認證功能涉及到四個數據表,DB_PREFIX爲配置文件中設置的數據庫前綴
DB_PREFIX_group 權限組表
DB_PREFIX_groupuser 組-用戶關聯表
DB_PREFIX_access 訪問權限表
DB_PREFIX_node 權限節點表
ThinkPHP後臺治理的權限授權圖示:
標籤:方法,模塊,定義,剪貼板,系統,項目,權限,節點,表單,用戶,屬性,內容,安全,你的,代碼,時候,就會,多個,數據,方式
關鍵字:
thinkphp,thinkphp 驗證碼,thinkphp 分頁,thinkphp 文件上傳,thinkphp session,thinkphp success,thinkphp搭建cms,thinkphp1.5,thinkphp基礎,thinkphp 特性
相關資訊:
ThinkPHP開發指南(二) 高級特性 – PHPChina 9條回覆-發帖時間:2007年5月25日本篇主要用於添加一些ThinkPHP的高級開發特性,爲了不影響閱讀,把每個小主題單獨列出來,比較清晰一 些,有興趣的依次往下面看了,呵呵~1樓 項目自動創建和模塊自動生

使用thinkPHP做註冊程序的實例

數據庫和數據表的結構
具體的操作步驟如下:
第一步:入口文件index.php內容 (此文件基本是屬於固定的格式)
<?php
define(\’THINK_PATH\’,\’./ThinkPHP/\’);
define(\’APP_NAME\’,\’MyApp\’);
define(\’APP_PAHT\’,\’./MyApp/\’);
require_once THINK_PATH.\’ThinkPHP.php\’;
$app=new App();
$app->run();
?>
第二步:Active文件夾中的IndexAction.class.php文件內容
<?php
class IndexAction extends Action
{
public function Index()
{
$this->display();//渲染到模板index.html
}
// 生成驗證碼
public function verify()//這是一個固定的格式
{
import(\”ORG.Util.Image\”);
Image::buildImageVerify();
}
//檢驗驗證碼是否正確
public function verifyCheck()
{
if (md5($_POST[\'verifyTest\']) != Session::get(\’verify\’))
{
die(\’驗證碼錯誤\’);  //如果驗證碼不對就退出程序
}
}
function insert()
{
header(\’Content-Type:text/html; charset=utf-8\’);//防止出現亂碼
$this->verifyCheck();//調用本類的函數,
$Pagemodel = D(\”user\”);
$vo = $Pagemodel->create();
if(false === $vo) die($Pagemodel->getError());
$topicid = $Pagemodel->add(); //add方法會返回新添加的記錄的主鍵值
if($topicid) echo \”數據庫添加成功\”;
else throw_exception(\”數據庫添加失敗\”);
}
}
?>
第三步:寫模板文件,也就是寫LIB文件夾中的HTML文件
<!DOCTYPE html PUBLIC \”-//W3C//DTD XHTML 1.0 Transitional//EN\” \”http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\”>
<html xmlns=\”http://www.w3.org/1999/xhtml\”>
<head>
<meta http-equiv=\”Content-Type\” content=\”text/html; charset=utf-8\” />
<title>無標題文檔</title>
<style type=\”text/css\”>
#form1
{
width:250px;
height:250px;
margin:20px auto;
border:1px #039 solid;
padding:20px 20px;
}
</style>
<script type=\’text/javascript\’>
function freshVerify()
{
document.getElementByIdx(\’verifyImg\’).src=\’__URL__/verify/\’+Math.random();
}
</script>
</head>
<body>
<form name=\”form1\” method=\”post\” action=\”__URL__/insert\”>
註冊帳號:<br /><br />
帳號:<input maxlength=\”16\” /><br /><br />
密碼:<input type=\”password\” maxlength=\”16\” /><br /><br />
Q&nbsp;&nbsp;Q:<input type=\”text\” maxlength=\”16\” /><br /><br />
驗證碼:<input type=\’text\’ name=\’verifyTest\’ size=\”5\”>
<img style=\’cursor:pointer\’ title=\’刷新驗證碼\’ src=\’__URL__/verify\’ id=\’verifyImg\’ onClick=\’freshVerify()\’/> <br /><br />
<input type=\”submit\” value=\”提交\” />
<input value=\”重置\” />
</form>
</body>
</html>
注意:
1、也就是一個form,action=\”__URL__/insert\”表示提交到當前Action類(即IndexAction.class.php文件中)的insert函數;
2、此模板(靜態網頁)中的各個name要與user數據表的各個字段是一樣的名字,否則在insert函數中數據不能自動進庫。
3、驗證碼的刷新由靜態網頁負責。值相等由IndexAction類的verifyCheck()負責。
第四步:寫Model類,在model目錄中,文件名爲:UserModel.class.php
<?php
class UserModel extends Model
{
var $_validate=array
(
array(\’user\’,\’require\’,\’賬號不能爲空\’,1),
array(\’qq\’,\’number\’,\’QQ號必須是數字,註冊失敗!\’,2),
array(\’user\’,\’\',\’此帳號己經存在!\’,0,\’unique\’,\’add\’)
);
var $_auto=array
(
array(\’password\’,\’md5\’,\’add\’,\’function\’),
//array(\’create_time\’,\’time\’,\’add\’,\’function\’), 此句只能填充時間戳
array(\’create_time\’,\’zhongguo_time\’,\’add\’,\’callback\’)  //填充年月日時分秒只能用callback,不能用function
);
function zhongguo_time()  //此函數只能放在本模塊中,否則調用不到
{
return date(\”Y-m-d H:i:s\”);
}
}
?>
註解:
1、文件名,類名必須用user,因爲數據庫中對應的是user表;
2、其實只要寫一個框架就行了:
class UserModel extends Model
{
}
但爲什麼還要var $_validate=array()和var $_auto=array()呢?那是因爲:
var $_validate=array()是自動驗證的意思,var $_auto=array()是自動填充的意思。
自動驗證就是驗證數據的格式是否正確,自動填充就是你不輸入的值,它自動給你灌進去,比如\’create_time\’建立時間,我們在模板中沒有這個,但這裏它就自動進庫了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章