Heim >Backend-Entwicklung >PHP-Tutorial >Automatisches Füllprinzip und Nutzungsanalyse des ThinkPHP-Frameworks

Automatisches Füllprinzip und Nutzungsanalyse des ThinkPHP-Frameworks

不言
不言Original
2018-04-09 14:10:081706Durchsuche

In diesem Artikel wird hauptsächlich das automatische Ausfüllen des thinkPHP-Frameworks vorgestellt. Er kombiniert aktuelle Beispiele, um die Prinzipien und die Verwendung des automatischen Ausfüllens des thinkPHP-Frameworks detaillierter zu analysieren.

Die Beispielanalyse in In diesem Artikel finden Sie das Prinzip und die Verwendung des automatischen Füllprinzips des ThinkPHP-Frameworks. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

thinkphp verfügt über eine Methode zum automatischen Ausfüllen von Feldern

Die Ausfüllregeln sind wie folgt


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


Hinweis: Nach dem Studium des Quellcodes stellte ich fest, dass es tatsächlich einen vierten Parameter gibt: Dies wird verwendet, um Parameter an Funktionen oder Rückrufmethoden zu übergeben. Standardmäßig ist der Feldwert , z. B.:


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


Überprüfen Sie die Zahlungsdynamik und die statische

Statische Überprüfung

Definieren Sie die automatischen Überprüfungsregeln des Modells vorab in der Modellklasse, und es wird automatisch überprüft. create

Das Folgende sind offizielle Beispiele

1. Definieren Sie zunächst die Verifizierungsregeln im Modell


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. Verwenden Sie beim Aufruf die Methode

, um create


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


Dynamisch auszufüllen Verifizierung

Das Folgende ist das offizielle Beispiel


$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();


Das Folgende ist das Kern eins Code-Analyse:

Nachdem die Methode zum Erstellen aufgerufen wurde, wird die Methode

wie folgt aufgerufen: autoOperation


/**
 * 自动表单处理
 * @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;
}
Verwandte Empfehlungen:


Einige grundlegende Verwendung von ThinkPHP

Einige notwendige Konfigurationen für thinkphp5 in der LNMP-Umgebung

Das obige ist der detaillierte Inhalt vonAutomatisches Füllprinzip und Nutzungsanalyse des ThinkPHP-Frameworks. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn