亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    詳解thinkPHP5模型中的修改器和自動(dòng)完成

    下面由thinkphp教程欄目給大家介紹thinkPHP5模型中的修改器和自動(dòng)完成,希望對(duì)需要的朋友有所幫助!

    詳解thinkPHP5模型中的修改器和自動(dòng)完成

    一、修改器

    實(shí)際開發(fā)過程中,一些字段在存儲(chǔ)到表中時(shí)需要做些修改,如用戶注冊(cè)時(shí)填寫的密碼在表中存儲(chǔ)時(shí)需要加密,修改器因此產(chǎn)生。

    修改器同獲取器類似,需要寫在模型中,其命名規(guī)則為set + 字段名(按駝峰法) + Attr。

    實(shí)例:添加用戶時(shí),用戶的密碼需要加密

    創(chuàng)建用戶表

    CREATE TABLE `tp_user` (   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,   `username` varchar(60) NOT NULL DEFAULT '',   `password` char(32) NOT NULL DEFAULT '',   `mobile` varchar(15) NOT NULL DEFAULT '' COMMENT '用戶手機(jī)號(hào)',   `email` varchar(100) NOT NULL DEFAULT '',   `sex` tinyint(3) NOT NULL DEFAULT '0' COMMENT '性別 0未知 1男 2女',   `age` tinyint(3) unsigned NOT NULL DEFAULT '0',   `time` int(10) NOT NULL DEFAULT '0' COMMENT '時(shí)間',   `create_time` int(10) NOT NULL DEFAULT '0' COMMENT '創(chuàng)建時(shí)間',   `update_time` int(10) NOT NULL DEFAULT '0' COMMENT '更新時(shí)間',   `status` tinyint(3) NOT NULL DEFAULT '1' COMMENT '記錄狀態(tài) -1刪除 0禁用 1正常',   PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

    模型中添加密碼修改器:

    namespace appindexmodel; use thinkModel; class User extends Model{     //密碼的修改器     public function setPasswordAttr($val){         //此處做一些對(duì)用戶傳入值的處理         return md5($val);     } }

    控制器中添加用戶數(shù)據(jù):

    namespace appindexcontroller; use thinkController; use appindexmodelUser; class Index extends Controller{     public function index(){         //模擬傳入的post表單數(shù)據(jù)         $data = [             'username' => 'Emrys',             'password' => 'emrys',             'email' => 'emrys126.com',             'mobile' => '13955555555',             'sex' => 1,             'age' => 18         ];          //添加用戶數(shù)據(jù)         $res = User::create($data);         dump($res);     } }

    運(yùn)行后數(shù)據(jù)庫多了記錄,密碼字段是經(jīng)過密碼修改器改變后的值。

    詳解thinkPHP5模型中的修改器和自動(dòng)完成

    二、自動(dòng)完成

    實(shí)際開發(fā)中創(chuàng)建的表字段基本都存在需要自動(dòng)完成的字段,如記錄創(chuàng)建時(shí)間、更新時(shí)間、創(chuàng)建人id(登錄用戶的id)等,這時(shí)就需要用到表的自動(dòng)完成功能。自動(dòng)完成包括插入和更新時(shí)都自動(dòng)完成、插入時(shí)自動(dòng)完成、更新時(shí)自動(dòng)完成三種,其設(shè)置是在模型中使用

    //插入和更新時(shí)均自動(dòng)完成的字段 protected $auto = [];  //只在插入時(shí)自動(dòng)完成的字段 protected $insert = [];  //只在更新時(shí)自動(dòng)完成的字段 protected $update = [];

    現(xiàn)設(shè)置time字段在插入和更新時(shí)均自動(dòng)完成、create_time字段在插入時(shí)自動(dòng)完成、update_time字段在更新時(shí)自動(dòng)完成。自動(dòng)完成設(shè)置如下,

    namespace appindexmodel; use thinkModel; class User extends Model{ 	//自動(dòng)完成,插入和更新時(shí)都自動(dòng)執(zhí)行 	protected $auto = [ 		'time' 	];  	//只在插入時(shí)完成 	protected $insert = [ 		'create_time' 	];  	//只在數(shù)據(jù)更新時(shí)完成 	protected $update = [ 		'update_time' 	];  	//獲取器 	public function getSexAttr($val){ 		switch ($val) { 			case '1': 				return '男'; 				break; 			case '2': 				return '女'; 				break; 			default: 				return '保密'; 				break; 		} 	}  	//密碼的修改器 	public function setPasswordAttr($val){ 		return md5($val); 	}  	//時(shí)間修改器 	public function setTimeAttr(){ 		return time(); 	}  	//創(chuàng)建時(shí)間修改器 	public function setCreateTimeAttr(){ 		return time(); 	}  	//更新時(shí)間修改器 	public function setUpdateTimeAttr(){ 		return time(); 	} }

    控制器中添加數(shù)據(jù)、更新數(shù)據(jù)完成測試,

    namespace appindexcontroller; use thinkController; use appindexmodelUser; class Index extends Controller{     public function index(){         //模擬傳入的post表單數(shù)據(jù)         $data = [             'username' => 'Emrys',             'password' => 'emrys',             'email' => 'emrys126.com',             'mobile' => '13955555555',             'sex' => 1,             'age' => 18         ];          //添加用戶數(shù)據(jù)         $res = User::create($data);         dump($res);     } }

    執(zhí)行上述添加數(shù)據(jù)代碼的time、create_time、update_time三字段的運(yùn)行結(jié)果如下圖所示,添加數(shù)據(jù)時(shí)time和create_time字段均插入當(dāng)前時(shí)間,update_time是默認(rèn)值0.

    詳解thinkPHP5模型中的修改器和自動(dòng)完成

    控制器中更新數(shù)據(jù)的代碼:

    namespace appindexcontroller; use thinkController; use appindexmodelUser; class Index extends Controller{     public function index(){         //更新數(shù)據(jù)         $user = User::get(12);         $user->age = 120;         $res = $user->save();         dump($res);     } }

    執(zhí)行上方的更新數(shù)據(jù)代碼后,update_time字段添加了當(dāng)前時(shí)間,time字段的值也更新為當(dāng)前時(shí)間,create_time的值未發(fā)生改變。

    詳解thinkPHP5模型中的修改器和自動(dòng)完成

    使用修改器的方式實(shí)現(xiàn)自動(dòng)完成功能需要在每個(gè)模型中添加各字段的修改器,這樣造成代碼臃腫。 tp5為此有專門的配置,在數(shù)據(jù)庫連接配置文件database.php中的auto_timestamp = false項(xiàng),改為true,即可在每個(gè)表中進(jìn)行create_time、update_time的自動(dòng)完成。由于不是每個(gè)表中一定存在create_time和update_time字段,因此tp5也提供了在模型中配置的方法。

    //開啟自動(dòng)寫入時(shí)間戳 protected $autoWriteTimestamp = true;  //默認(rèn)的時(shí)間戳是create_time和update_time,可通過如下進(jìn)行修改。如果不想在插入或更新數(shù)據(jù)時(shí)添加該字段的值,則設(shè)置為false protected $createTime = false; protected $updateTime = '這里是真實(shí)表中的更新時(shí)間字段';

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)