Über das Prinzip und die Analyse des automatischen Ausfüllens im thinkPHP-Framework

不言
Freigeben: 2023-04-01 13:00:01
Original
1895 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich das automatische Ausfüllen des thinkPHP-Frameworks vorgestellt. Er analysiert die Prinzipien, Verwendungsmethoden und zugehörigen Betriebsvorkehrungen des automatischen Ausfüllens des thinkPHP-Frameworks ausführlich in Form von Beispielen

Beispiele analysieren die Prinzipien und die Verwendung des automatischen Ausfüllens im thinkPHP-Framework. 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,完成规则,[完成条件,附加规则]),
   ......
);
Nach dem Login kopieren

Hinweis: Nach dem Studium des Quellcodes stellte ich fest, dass es tatsächlich einen vierten Parameter gibt, der zum Übergeben von Parametern an Funktionen verwendet wird oder Rückrufmethoden. Parameter 1 ist standardmäßig auf diesen Feldwert eingestellt, wie zum Beispiel:

array('mobile','trim',3,'function',参数2,参数3'),
Nach dem Login kopieren

Zahlung dynamisch und statisch überprüfen

Statische Überprüfung

definiert die automatischen Überprüfungsregeln des Modells in der Modellklasse vor und wird nach Verwendung von <🎜 automatisch überprüft > Methode. create

Das Folgende ist das offizielle Beispiel

1 Definieren Sie zunächst die Verifizierungsregeln im Modell

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

Wann Wenn Sie anrufen, verwenden Sie die Methode

, um create

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

Dynamische Überprüfung

automatisch auszufüllen. Das Folgende ist offiziell Beispiel

$rules = array (
  array(&#39;status&#39;,&#39;1&#39;), // 新增的时候把status字段设置为1
  array(&#39;password&#39;,&#39;md5&#39;,3,&#39;function&#39;) , // 对password字段在新增和编辑的时候使md5函数处理
  array(&#39;update_time&#39;,&#39;time&#39;,2,&#39;function&#39;), // 对update_time字段在更新的时候写入当前时间戳
);
$User = M(&#39;User&#39;);
$User->auto($rules)->create();
$User->add();
Nach dem Login kopieren

Das Folgende ist die Kerncodeanalyse:

Nachdem die Methode create aufgerufen wurde, wird

Methode wird wie folgt aufgerufenautoOperation

/**
 * 自动表单处理
 * @access public
 * @param array $data 创建数据
 * @param string $type 创建类型
 * @return mixed
 */
private function autoOperation(&$data,$type) {
  if(!empty($this->options[&#39;auto&#39;])) {
    $_auto  =  $this->options[&#39;auto&#39;];
    unset($this->options[&#39;auto&#39;]);
  }elseif(!empty($this->_auto)){
    $_auto  =  $this->_auto;
  }
  // 自动填充
  if(isset($_auto)) {
    foreach ($_auto as $auto){
      // 填充因子定义格式
      // array(&#39;field&#39;,&#39;填充内容&#39;,&#39;填充条件&#39;,&#39;附加规则&#39;,[额外参数])
      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] = &#39;string&#39;;
        switch(trim($auto[3])) {
          case &#39;function&#39;:  // 使用函数进行填充 字段的值作为参数
          case &#39;callback&#39;: // 使用回调方法
            $args = isset($auto[4])?(array)$auto[4]:array();
            if(isset($data[$auto[0]])) {
              array_unshift($args,$data[$auto[0]]);
            }
            if(&#39;function&#39;==$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 &#39;field&#39;:  // 用其它字段的值进行填充
            $data[$auto[0]] = $data[$auto[1]];
            break;
          case &#39;ignore&#39;: // 为空忽略
            if($auto[1]===$data[$auto[0]])
              unset($data[$auto[0]]);
            break;
          case &#39;string&#39;:
          default: // 默认作为字符串填充
            $data[$auto[0]] = $auto[1];
        }
        if(isset($data[$auto[0]]) && false === $data[$auto[0]] )  unset($data[$auto[0]]);
      }
    }
  }
  return $data;
}
Nach dem Login kopieren

Das Obige ist der gesamte Inhalt dieses Artikels Weitere verwandte Inhalte finden Sie im PHP Chinese Net!

Verwandte Empfehlungen:

Über die Verwendung von Smarty-Loop-Nesting

Über häufige Fehler beim Kompilieren von Konfigurationen in PHP

Analyse zur Verwendung von statischen Variablen und statischen Variablen in PHP

Das obige ist der detaillierte Inhalt vonÜber das Prinzip und die Analyse des automatischen Ausfüllens im thinkPHP-Framework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage