Maison >développement back-end >tutoriel php >Explication détaillée des principes et de l'utilisation du remplissage automatique du framework thinkPHP

Explication détaillée des principes et de l'utilisation du remplissage automatique du framework thinkPHP

php中世界最好的语言
php中世界最好的语言original
2018-05-17 11:44:431825parcourir

Cette fois, je vais vous apporter une explication détaillée du principe de remplissage automatique et de l'utilisation du framework thinkPHP. Quelles sont les précautions pour utiliser le principe de remplissage automatique du framework thinkPHP. cas, jetons un coup d'oeil.

thinkphp a une méthode pour remplir automatiquement les champs

Les règles de remplissage sont les suivantes

array(
   array(完成字段1,完成规则,[完成条件,附加规则]),
   array(完成字段2,完成规则,[完成条件,附加规则]),
   ......
);

Remarque : Recherche Après avoir lu 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 la valeur du champ , tel que :

array('mobile','trim',3,'function',参数2,参数3'),

Vérifier le paiement dynamique et statique

Vérification statique

Prédéfinir la

validation automatique règles du modèle dans la classe modèle , il sera automatiquement vérifié après avoir utilisé la méthode . create

Ce qui suit est l'exemple officiel

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字段在更新的时候写入当前时间戳
   );
}
2 Lors de l'appel, utilisez la méthode

pour automatiquement. Remplircreate

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

Vérification dynamique

Ce qui suit est l'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();

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

Une fois la méthode create appelée, la méthode

sera appelée. 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;
}
Je pense que vous maîtrisez la méthode après avoir lu le cas. dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres sites Web chinois php Articles connexes !

Lecture recommandée :

Analyse de cas d'utilisation du principe de fermeture PHP (OCP)

Implémentation PHP de l'algorithme de fractionnement du montant de l'enveloppe rouge cas Explication détaillée

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!

Déclaration:
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