Detaillierte Erläuterung der Prinzipien und Verwendung des automatischen Füllens des thinkPHP-Frameworks

php中世界最好的语言
Freigeben: 2023-03-26 09:20:02
Original
1796 Leute haben es durchsucht

Dieses Mal werde ich Ihnen die Prinzipien und die Verwendung des automatischen Füllprinzips des thinkPHP-Frameworks ausführlich erläutern. Was sind die Vorsichtsmaßnahmen, wenn Sie das automatische Füllprinzip des thinkPHP-Frameworks verwenden? ein Blick.

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

Die Füllregeln lauten wie folgt

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

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

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

Überprüfen Sie die Zahlungsdynamik und die statische

Statische Überprüfung

Definieren Sie vorab die automatischen Validierungsregeln des Modell in der Modellklasse Bei Verwendung von createEs wird nach der Methode automatisch überprüft.

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('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字段在更新的时候写入当前时间戳
   );
}
Nach dem Login kopieren

2. Beim Aufruf wird die Methode create automatisch ausgefüllt

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

Dynamische Überprüfung

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();
Nach dem Login kopieren

Das Folgende ist die Kerncode-Analyse:

< Nachdem die 🎜>create-Methode aufgerufen wurde, wird die

-Methode aufgerufen: autoOperation

/**
 * 自动表单处理
 * @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
Ich glaube, Sie haben die Methode gemeistert, nachdem Sie den Fall in diesem Artikel gelesen haben Informationen, bitte beachten Sie andere verwandte Artikel auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Anwendungsfallanalyse des PHP-Closure-Prinzips (OCP)

PHP-Implementierung des Algorithmus zur Aufteilung der Menge an roten Umschlägen Fall Ausführliche Erklärung

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Prinzipien und Verwendung des automatischen Füllens des thinkPHP-Frameworks. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!