ホームページ >PHPフレームワーク >ThinkPHP >thinkPHP5モデルの修飾子とオートコンプリートの詳細な説明
次のチュートリアル コラムでは、thinkPHP5 モデルのモディファイアとオートコンプリートについて紹介します。
1. 修飾子実際の開発プロセスでは、テーブルに保存するときに入力するパスワードなど、いくつかのフィールドを変更する必要があります。ユーザー登録 テーブルに保存するときに暗号化が必要なため、修飾子が使用されます。
修飾子はゲッターに似ており、モデル内に記述する必要があります。命名規則は、セット フィールド名 (キャメル ケース方式による) 属性です。
例: ユーザーを追加するとき、ユーザーのパスワードを暗号化する必要があります
ユーザー テーブルを作成する
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)など この場合、テーブルのオートコンプリート機能を使用する必要があります。自動補完には、挿入および更新中の自動補完、挿入中の自動補完、更新中の自動補完の 3 種類があり、設定は、モデル内の
//插入和更新时均自动完成的字段 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); } }
time、create_time、update_timeの3フィールドを実行した結果上記で追加されたデータ コードは次の図に示すとおりです。データを追加すると、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 はモデル内でそれらを構成するメソッドも提供します。
えええええ
以上がthinkPHP5モデルの修飾子とオートコンプリートの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。