【ThinkPHP學習】模型Model的自定義

RT.

ThinkPHP允許用戶進行自定義Model類。目前我所學到的,Model類的作用是用來作自動驗證,自動完成。一旦自定義了Model類,實例化模型類的時候就需要使用D方法而不是M方法,D方法實例化的時候是實例化某個具體的模型類,M方法適用於只是對數據表進行基本的CURD操作,因爲他不需要加載具體的模型類,所以性能會更高。

例如我在我的User模型類中使用$_validate數組來對提交的數據進行自動驗證,這種定義屬於靜態定義。

array(
array( 驗證字段 1, 驗證規則 , 錯誤提示 ,[ 驗證條件 , 附加規則 , 驗證時間 ]),
array( 驗證字段 2, 驗證規則 , 錯誤提示 ,[ 驗證條件 , 附加規則 , 驗證時間 ]),
......
 );

驗證字段就是需要進行驗證的數據項字段的名稱。

驗證規則要使用,需配合附加規則,在使用正則驗證的前提下,系統內置了一些常用的正則驗證的規則,可以直接作爲驗證規則使用,包括字段必須require,email郵箱,url URL地址,currency貨幣,number數字。

提示信息,用於用戶提交數據驗證失敗之後的提示信息定義。

驗證條件,包括三種情況:

self::EXISTS_VALIDATE 或者0 存在字段就驗證(默認)
self::MUST_VALIDATE 或者1 必須驗證
self::VALUE_VALIDATE或者2 值不爲空的時候驗證
附加規則,常用的有regex,function(函數驗證,定義的驗證規則是一個函數名),callback(方法驗證,定義的驗證規則是當前模型類的一個方法),confirm,equal,notequal,in,notin,length,between,notbetween,expire(驗證是否在有效期,定義的驗證規則是一個時間範圍),unique(驗證是否唯一)。

驗證時間:

self::MODEL_INSERT或者1新增數據時候驗證
self::MODEL_UPDATE或者2編輯數據時候驗證
self::MODEL_BOTH或者3全部情況下驗證(默認)

在進行自動驗證的時候,系統會對定義好的驗證規則進行一次驗證。如果某一條驗證規則沒有通過,則會報錯,getError方法返回的錯誤信息就是對應字段的驗證規則裏面的錯誤提示信息。

create方法是對錶單提交的POST數據進行自動驗證,如果你的數據不是來自表單post,也可以使用自動驗證,不過先用getData()方法獲取數據源數據,然後$User->create($data)。一般情況下,create方法會自動判斷當前是新增數據還是編輯數據,主要是通過表單的隱藏數據添加主鍵信息。舉個例子:

<?php
namespace Admin\Model;
use Think\Model;
class UserModel extends Model{
	//form validate
	protected $_validate=array(
		array('username' , 'require' , 'account is required!', 1 , 'regex', 3),
		//array('username' , '', 'account is not available', 1 , 'unique', 1),
		array('password' , 'require' , 'password is required!' , 1 , 'regex' , 1),
		array('email',  'email' , 'mailbox addr is wrong!'),
		array('active' , array(0,1), 'data wrong', 0 , 'in'),
		array('password', 'checkPwd', 'password is not reached 6', 1 , 'callback'),
		);
	protected function checkPwd(){
		$password = $_POST['password'];
		if(strlen($password) >= 6){
			return true;
		}else{
			return false;
		}
	}

動態驗證則是在驗證之前定義一個rules數組,然後由於不需要使用具體的模型類,可以使用M方法實例化對象就可以。然後通過$User->validate($rules)->create()方法進行動態驗證。

自動完成,則通過$_auto常量數組來完成,例如我要在表單提交的時候增加日期以及對密碼添加md5驗證。

	protected $_auto=array(
		array('reg_date', 'getDate', 1, 'callback'),
		array('password', 'md5' , 1 , 'function'),
		);
	protected getDate(){
		//echo date('Y-m-d H : i : s');
		return date('Y-m-d H:i:s');

	}

以上就是Model類的自定義,自動驗證(靜態驗證,動態驗證),自動完成。

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