Le modificateur est l'un des trois "outils" les plus puissants du modèle. Dans cet article, nous résumerons l'utilisation du modificateur et quelques précautions.
Définir le modificateur
La fonction du modificateur est d'effectuer certains traitements de données nécessaires avant que les données de l'objet du modèle ne soient écrites dans la base de données. La définition standard du modificateur est. comme suit :
public function setFieldNameAttr($value, $data) { // 对value值进行处理 data参数是当前全部数据 // 返回值就是实际要写入数据库的值 return $value; }
FieldName correspond au champ field_name de la table de données (faites attention aux spécifications des champs de la table de données et aux spécifications de définition de la méthode du modificateur, sinon cela provoquera des erreurs).
En principe, chaque modificateur ne doit traiter que les données du champ correspondant, mais il est autorisé à traiter plusieurs champs en même temps si nécessaire.
Ce qui suit est un exemple
public function setBirthdayAttr($value, $data) { // 格式化生日数据 $birthday = strtotime($value); // 根据生日判断年龄 $age = getAgeByBirthday($birthday); // 赋值年龄数据 $this->setAttr('age', $age); return $birthday; } public function setAgeAttr($value,$data) { return floor($value); }
La raison pour laquelle la méthode setAttr est utilisée est de garantir que l'opération d'attribution d'âge peut toujours passer par un modificateur distinct. Si vous n'avez pas de modificateurs supplémentaires, vous pouvez également l'écrire comme
public function setBirthdayAttr($value, $data) { // 格式化生日数据 $birthday = strtotime($value); // 根据生日判断年龄 $age = getAgeByBirthday($birthday); // 赋值年龄数据 $this->data['age'] = $age; return $birthday; }
Notez qu'il ne doit pas être écrit comme
$this->age = $age;
car l'attribution d'objets de données à l'intérieur du modèle entraînera des inexactitudes dues à. confusion avec les attributs internes du modèle, conséquences prévues.
Si vous pouvez modifier d'autres champs dans un certain modificateur, n'oubliez pas que le modificateur de champ que vous devez modifier en plus doit avoir été attribué (ou que le modificateur a été déclenché).
Comment appeler
La méthode du modificateur n'a pas besoin d'être appelée manuellement. Une fois définie selon la spécification de définition, le système l'appellera automatiquement sous le. circonstances suivantes :
·Affectation d'un objet modèle ;
·Appeler la méthode de données de le modèle, et le deuxième paramètre est passé en vrai
·Appelez la méthode de sauvegarde du modèle et transmettez les données du tableau
<🎜 ; >·Appelle explicitement la méthode setAttr du modèle
· définit la complétion automatique de ce champ ;
Par exemple, le modèle User définit la méthode de périphérique de modification setPasswordAttr.public function setPasswordAttr($value, $data) { return md5($value); }
$user = User::get(1); $user->password = 'think'; $user->save();
$user = User::get(1); $user->data('password', md5('think')); $user->save();
Éviter les conflits
De nombreux développeurs aiment définir la saisie semi-automatique (y compris l'insertion et la mise à jour) pour les modificateurs.protected $auto = ['password'];
User::beforeUpdate(function($user) { $user->password = md5('think'); });
User::beforeUpdate(function($user) { $user->data('password', md5('think')); });
Conversion de type automatique
Si votre modificateur effectue uniquement une conversion de type sur les données, vous n'avez pas besoin de définir un modificateur, mais définissez simplement le type de champ directement.public function setScoreAttr($value, $data) { return (float) $score; }
protected $type = [ 'score' => 'float', ];
tutoriels d'introduction ThinkPHP gratuits, tout le monde est invité à apprendre !
Cet article est reproduit à partir de : https://blog.thinkphp.cn/817548Ce 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!