thinkPHP5 모델의 수정자 및 자동 완성에 대한 자세한 설명

藏色散人
풀어 주다: 2021-02-11 10:13:46
앞으로
3150명이 탐색했습니다.

다음 튜토리얼 칼럼인 thinkphp에서는 thinkPHP5 모델의 수정자와 자동완성에 대해 소개하겠습니다. 필요한 친구들에게 도움이 되길 바랍니다!

thinkPHP5 모델의 수정자 및 자동 완성에 대한 자세한 설명

1. 수정자

실제 개발 과정에서 일부 필드는 테이블에 저장될 때 수정되어야 합니다. 예를 들어 사용자가 등록할 때 입력한 비밀번호는 테이블에 저장될 때 암호화되어야 합니다. 그래서 수정자가 생성됩니다.

                수정자는 getter와 유사하며 모델에 작성해야 합니다. 명명 규칙은 설정 + 필드 이름(카멜 표기법에 따름) + Attr입니다.

예: 사용자를 추가할 때 사용자의 비밀번호를 암호화해야 합니다.

사용자 테이블 만들기

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 '用户手机号',
  `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 '时间',
  `create_time` int(10) NOT NULL DEFAULT '0' COMMENT '创建时间',
  `update_time` int(10) NOT NULL DEFAULT '0' COMMENT '更新时间',
  `status` tinyint(3) NOT NULL DEFAULT '1' COMMENT '记录状态 -1删除 0禁用 1正常',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
로그인 후 복사

모델에 비밀번호 수정자 추가:

namespace app\index\model;
use think\Model;
class User extends Model{
    //密码的修改器
    public function setPasswordAttr($val){
        //此处做一些对用户传入值的处理
        return md5($val);
    }
}
로그인 후 복사

컨트롤러에 사용자 데이터 추가:

namespace app\index\controller;
use think\Controller;
use app\index\model\User;
class Index extends Controller{
    public function index(){
        //模拟传入的post表单数据
        $data = [
            'username' => 'Emrys',
            'password' => 'emrys',
            'email' => 'emrys126.com',
            'mobile' => '13955555555',
            'sex' => 1,
            'age' => 18
        ];

        //添加用户数据
        $res = User::create($data);
        dump($res);
    }
}
로그인 후 복사
로그인 후 복사

실행 후, 데이터베이스에 더 많은 레코드와 비밀번호 필드가 있습니다. 비밀번호 수정자에 의해 값이 변경되었습니까?

2. 자동 완성

실제 개발에서 생성되는 테이블 필드에는 기본적으로 녹음 생성 시간, 업데이트 시간, 작성자 ID(로그인 사용자 ID) 등 자동 완성이 필요한 필드가 있습니다. 이때 표의 자동완성 기능을 활용하세요. 자동 완성에는 삽입 및 업데이트 시 자동 완성, 삽입 시 자동 완성, 업데이트 시 자동 완성의 세 가지 유형이 있습니다. 설정은 모델에서 사용됩니다.

//插入和更新时均自动完成的字段
protected $auto = [];

//只在插入时自动完成的字段
protected $insert = [];

//只在更新时自动完成的字段
protected $update = [];
로그인 후 복사

이제 삽입 및 업데이트 시 모두 자동으로 완료되도록 시간 필드를 설정하고, 및 삽입 중 create_time 필드 update_time 필드가 업데이트되면 자동으로 완료됩니다. 자동 완료 설정은 다음과 같습니다.

namespace app\index\model;
use think\Model;
class User extends Model{
	//自动完成,插入和更新时都自动执行
	protected $auto = [
		'time'
	];

	//只在插入时完成
	protected $insert = [
		'create_time'
	];

	//只在数据更新时完成
	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);
	}

	//时间修改器
	public function setTimeAttr(){
		return time();
	}

	//创建时间修改器
	public function setCreateTimeAttr(){
		return time();
	}

	//更新时间修改器
	public function setUpdateTimeAttr(){
		return time();
	}
}
로그인 후 복사

컨트롤러에서 데이터를 추가하고 업데이트하여 테스트를 완료합니다.

namespace app\index\controller;
use think\Controller;
use app\index\model\User;
class Index extends Controller{
    public function index(){
        //模拟传入的post表单数据
        $data = [
            'username' => 'Emrys',
            'password' => 'emrys',
            'email' => 'emrys126.com',
            'mobile' => '13955555555',
            'sex' => 1,
            'age' => 18
        ];

        //添加用户数据
        $res = User::create($data);
        dump($res);
    }
}
로그인 후 복사
로그인 후 복사

데이터 추가 코드의 create_time 및 update_time 세 필드를 실행합니다. 아래 그림에서 데이터를 추가할 때 time과 create_time 필드는 현재 시간이 삽입되며, update_time은 기본값 0입니다.

컨트롤러에서 데이터를 업데이트하는 코드:

namespace app\index\controller;
use think\Controller;
use app\index\model\User;
class Index extends Controller{
    public function index(){
        //更新数据
        $user = User::get(12);
        $user->age = 120;
        $res = $user->save();
        dump($res);
    }
}
로그인 후 복사

업데이트 데이터 코드 실행 후 위에서 update_time 필드는 현재 시간을 추가하고 time 필드의 값도 현재 시간으로 업데이트되며 create_time 값은 변경되지 않았습니다.

수정자를 사용하여 자동 완성 기능을 구현하려면 각 모델의 각 필드에 수정자를 추가해야 하므로 코드가 비대해집니다. tp5에는 이를 위한 특별한 구성이 있습니다. 데이터베이스 연결 구성 파일인 Database.php의 auto_timestamp = false 항목을 true로 변경하면 각 테이블의 create_time 및 update_time이 자동으로 완료됩니다. create_time 및 update_time 필드가 모든 테이블에 반드시 존재하는 것은 아니므로 tp5는 모델에서 이를 구성하는 방법도 제공합니다.

rreee

위 내용은 thinkPHP5 모델의 수정자 및 자동 완성에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿