À propos du principe et de l'analyse du remplissage automatique dans le framework thinkPHP

不言
Libérer: 2023-04-01 13:00:01
original
1903 Les gens l'ont consulté

Cet article présente principalement le remplissage automatique du framework thinkPHP. Il analyse en détail sous forme d'exemples les principes, les méthodes d'utilisation et les précautions de fonctionnement associées au remplissage automatique du framework thinkPHP. >

Des exemples analysent les principes et l'utilisation du remplissage automatique dans le framework thinkPHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

thinkphp a une méthode pour remplir automatiquement les champs

Les règles de remplissage sont comme suit

array(
   array(完成字段1,完成规则,[完成条件,附加规则]),
   array(完成字段2,完成规则,[完成条件,附加规则]),
   ......
);
Copier après la connexion

Remarque : après avoir étudié le code source, j'ai découvert qu'il existe en fait un quatrième paramètre, qui est utilisé pour transmettre des paramètres aux fonctions ou aux méthodes de rappel. Le paramètre 1 est par défaut sur ce champ Valeur , tel que :

array('mobile','trim',3,'function',参数2,参数3'),
Copier après la connexion

Vérifier le paiement. dynamique et statique

Vérification statique

Prédéfinissez les règles de vérification automatique du modèle dans la classe de modèle, et il sera automatiquement vérifié après avoir utilisé la méthode

. create

Ce qui suit sont des exemples officiels

1. Définissez d'abord les règles de vérification dans le modèle

namespace Home\Model;
use Think\Model;
class UserModel extends Model{
   protected $_auto = array (
     array('status','1'), // 新增的时候把status字段设置为1
     array('password','md5',3,'function') , // 对password字段在新增和编辑的时候使md5函数处理
     array('name','getName',3,'callback'), // 对name字段在新增和编辑的时候回调getName方法
     array('update_time','time',2,'function'), // 对update_time字段在更新的时候写入当前时间戳
   );
}
Copier après la connexion

2 . Lors de votre appel, utilisez la méthode

pour remplir automatiquement create

$User = D("User"); // 实例化User对象
if (!$User->create()){ // 创建数据对象
   // 如果创建失败 表示验证没有通过 输出错误提示信息
   exit($User->getError());
}else{
   // 验证通过 写入新增数据
   $User->add();
}
Copier après la connexion

vérification dynamique

en dessous est un exemple officiel

$rules = array (
  array('status','1'), // 新增的时候把status字段设置为1
  array('password','md5',3,'function') , // 对password字段在新增和编辑的时候使md5函数处理
  array('update_time','time',2,'function'), // 对update_time字段在更新的时候写入当前时间戳
);
$User = M('User');
$User->auto($rules)->create();
$User->add();
Copier après la connexion

Ce qui suit est l'analyse du code de base :

La méthode de création sera appelé après son appel

La méthode est la suivanteautoOperation

/**
 * 自动表单处理
 * @access public
 * @param array $data 创建数据
 * @param string $type 创建类型
 * @return mixed
 */
private function autoOperation(&$data,$type) {
  if(!empty($this->options['auto'])) {
    $_auto  =  $this->options['auto'];
    unset($this->options['auto']);
  }elseif(!empty($this->_auto)){
    $_auto  =  $this->_auto;
  }
  // 自动填充
  if(isset($_auto)) {
    foreach ($_auto as $auto){
      // 填充因子定义格式
      // array('field','填充内容','填充条件','附加规则',[额外参数])
      if(empty($auto[2])) $auto[2] = self::MODEL_INSERT; // 默认为新增的时候自动填充
      //这里的判断是关键,$type为当前的操作状态,值为1表示是插入,值为2表示是更新
      //如果当前的$type状态值等于设置的值$auto[2]或者$auto[2]的值为3,代表需要填充
      if( $type == $auto[2] || $auto[2] == self::MODEL_BOTH) {
        if(empty($auto[3])) $auto[3] = 'string';
        switch(trim($auto[3])) {
          case 'function':  // 使用函数进行填充 字段的值作为参数
          case 'callback': // 使用回调方法
            $args = isset($auto[4])?(array)$auto[4]:array();
            if(isset($data[$auto[0]])) {
              array_unshift($args,$data[$auto[0]]);
            }
            if('function'==$auto[3]) {
              $data[$auto[0]] = call_user_func_array($auto[1], $args);
            }else{
              $data[$auto[0]] = call_user_func_array(array(&$this,$auto[1]), $args);
            }
            break;
          case 'field':  // 用其它字段的值进行填充
            $data[$auto[0]] = $data[$auto[1]];
            break;
          case 'ignore': // 为空忽略
            if($auto[1]===$data[$auto[0]])
              unset($data[$auto[0]]);
            break;
          case 'string':
          default: // 默认作为字符串填充
            $data[$auto[0]] = $auto[1];
        }
        if(isset($data[$auto[0]]) && false === $data[$auto[0]] )  unset($data[$auto[0]]);
      }
    }
  }
  return $data;
}
Copier après la connexion

Ce qui précède représente l'intégralité du contenu de cet article. J'espère que cela sera utile à l'étude de tout le monde. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

À propos de l'utilisation de l'imbrication de boucles intelligentes

À propos des erreurs courantes lors de la compilation de configure en PHP

Analyse sur l'utilisation des variables statiques et des variables statiques en PHP

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:php.cn
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