PrestaShop ObjectModel讲解

来自站长百科
跳转至: 导航、​ 搜索

ObjectModelPrestaShop系统中的一个非常重要的抽象类(相信了解JAVAC++等高级语言的朋友,对抽象类不陌生),准确的说它是一个包含了数据表CURD基本操作的工具类。

我愿意称这个类是一个比较别扭的base model,它包含了数据表的描述基本描述、CURD操作、常规的数据验证服务等。

相信有些朋友跟我一样,已经对Presta学习有些日子了,大家都会发现只要界面表单中的元素的名称与表中的字段名称一致,系统就会自动识别出入库数据。其实并不是这样的。这主要是依赖两个重要的方法来完成的,getFieldscopyFromPost.

getFields 是 ObjectModel 并无实现的方法体,继承ObjectModel的对象类必须针对其自身的需求,建立字段数组,以便系统使用,同时需要对字段数组中的字段作显式声明。

  class  Category extends ObjectModel {  
  public $id_parent = 0;  
        
      public $name;  
        
      public $level_depth = 0;  
        
      public $position;  
        
      public $active;  
        
      public $date_add;  
        
      public $date_upd;  
                  ..........................  
  public function getFields() {  
          parent::validateFields ();  
          if (isset ( $this->id ))  
              $fields ['id_category'] = intval ( $this->id );  
          $fields ['id_parent'] = intval ( $this->id_parent );  
          $fields ['name'] = pSQL ( $this->name );  
          $fields ['level_depth'] = intval ( $this->level_depth );  
          $fields ['date_add'] = pSQL ( $this->date_add );  
          $fields ['date_upd'] = pSQL ( $this->date_upd );  
            
          return $fields;  
      }  
  }  

另一个重要的函数处于classes/Tools.class.php中,copyFromPost

copyFromPost负责把提交过来的表单数据,填充至ObjectModel的子类。它的工作原理是非常简单,遍历POST中的变量,并判断 ObjectModel子类中是否存在该变量,存在则赋值。这样就完成了对象的数据填充,系统再通过getFields方法是提取需要操作的数据。

  static  function copyFromPost(&$object) {  
          /* Classical fields */  
          foreach ( $_POST as $key => $value )  
              if (key_exists ( $key, $object )) {  
                  /* Do not take care of password field if empty */  
                  if ($key == 'passwd' and Tools::getValue ( $this->identifier ) and empty ( $value ))  
                      continue;  
                      /* Automatically encrypt password in MD5 */  
                  if ($key == 'passwd' and ! empty ( $value ))  
                      $value = Tools::encrypt ( $value );  
                  $object->{$key} = $value;  
              }  
      }  

注:# key_exists(PHP内置函数),用于是判断对象是否存在是目前属性。

相关条目[ ]

参考来源[ ]