다음 튜토리얼 칼럼인 thinkphp에서는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!