Maison > cadre php > PensezPHP > Explication détaillée des modificateurs et de la saisie semi-automatique dans le modèle thinkPHP5

Explication détaillée des modificateurs et de la saisie semi-automatique dans le modèle thinkPHP5

藏色散人
Libérer: 2021-02-11 10:13:46
avant
3156 Les gens l'ont consulté

La colonne tutorielle suivante de thinkphp vous présentera les modificateurs et la saisie semi-automatique dans le modèle thinkPHP5. J'espère qu'elle sera utile à ceux qui en ont besoin !

Explication détaillée des modificateurs et de la saisie semi-automatique dans le modèle thinkPHP5

1. Modificateur

Pendant le processus de développement proprement dit, certains champs doivent être modifiés lorsqu'ils sont stockés dans le tableau, comme le mot de passe renseigné lorsque le l'utilisateur enregistre Le cryptage est requis lors du stockage dans la table, d'où le modificateur.

Les modificateurs sont similaires aux getters et doivent être écrits dans le modèle. La règle de dénomination est définie + nom du champ (selon la casse camel) + Attr.

Exemple : Lors de l'ajout d'un utilisateur, le mot de passe de l'utilisateur doit être chiffré

Créer une table utilisateur

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;
Copier après la connexion

Ajouter un modificateur de mot de passe au modèle :

namespace app\index\model;
use think\Model;
class User extends Model{
    //密码的修改器
    public function setPasswordAttr($val){
        //此处做一些对用户传入值的处理
        return md5($val);
    }
}
Copier après la connexion

Dans le contrôleur, ajoutez des données utilisateur :

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);
    }
}
Copier après la connexion
Copier après la connexion

Après l'exécution, il y a plus d'enregistrements dans la base de données et le champ du mot de passe est la valeur modifiée par le modificateur de mot de passe.

2. Achèvement automatique

Les champs de table créés lors du développement réel ont essentiellement des champs qui doivent être automatiquement complétés, tels que l'heure de création de l'enregistrement, l'heure de mise à jour. , heure de création Person ID (l'ID de l'utilisateur connecté), etc. Dans ce cas, vous devez utiliser la fonction de saisie semi-automatique du tableau. Il existe trois types de complétion automatique : la complétion automatique lors de l'insertion et de la mise à jour, la complétion automatique lors de l'insertion et la complétion automatique lors de la mise à jour. Le paramètre consiste à utiliser

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

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

//只在更新时自动完成的字段
protected $update = [];
Copier après la connexion

dans le modèle pour définir désormais le champ d'heure pour qu'il soit automatiquement. complété lors de l'insertion et de la mise à jour. Le champ create_time est automatiquement complété lors de l'insertion et le champ update_time est automatiquement complété lors de la mise à jour. Les paramètres d'achèvement automatique sont les suivants.

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();
	}
}
Copier après la connexion

Ajoutez des données et mettez à jour les données dans le contrôleur pour terminer le test

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);
    }
}
Copier après la connexion
Copier après la connexion

Exécutez les trois champs ci-dessus de time, create_time et update_time de l'ajout de données. code. Les résultats sont affichés dans la figure ci-dessous, lors de l'ajout de données, les champs time et create_time sont insérés dans l'heure actuelle, et update_time est la valeur par défaut 0.

Le code de mise à jour des données dans le contrôleur :

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);
    }
}
Copier après la connexion

exécution Après le code de mise à jour des données ci-dessus, l'heure actuelle est ajoutée au champ update_time, la valeur du champ time est également mise à jour à l'heure actuelle, et la valeur de create_time reste inchangée.

L'utilisation de modificateurs pour implémenter la fonction de saisie semi-automatique nécessite l'ajout de modificateurs pour chaque champ de chaque modèle, ce qui entraîne un code volumineux. tp5 a une configuration spéciale pour cela. Modifiez l'élément auto_timestamp = false dans le fichier de configuration de connexion à la base de données database.php en true pour compléter automatiquement create_time et update_time dans chaque table. Étant donné que les champs create_time et update_time n'existent pas nécessairement dans chaque table, tp5 fournit également des méthodes pour les configurer dans le modèle.

//开启自动写入时间戳
protected $autoWriteTimestamp = true;

//默认的时间戳是create_time和update_time,可通过如下进行修改。如果不想在插入或更新数据时添加该字段的值,则设置为false
protected $createTime = false;
protected $updateTime = '这里是真实表中的更新时间字段';
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal