コード例 #1
0
 protected function convertToUserClassesItem($data)
 {
     $dont_set_class_for_mapping = false;
     if (isset($data["___class"])) {
         if ($data["___class"] === "GeoPoint") {
             // if "___class" == GEOPINT need create geopoint
             return $this->fillGeoPoint($data, "user_class");
         }
         $class_name = Backendless::getModelByClass($data["___class"]);
         if ($class_name != null) {
             $obj = $this->getObjectByClass($class_name);
         } else {
             $dont_set_class_for_mapping = true;
         }
     } else {
         $dont_set_class_for_mapping = true;
     }
     if ($dont_set_class_for_mapping === true) {
         // если не задан класс для маппинга модели она остается мултимассивом + рекурсивно проверяются его ключи.
         if (is_array($data)) {
             foreach ($data as $prop_name => $prop_val) {
                 $data[$prop_name] = $this->convertToUserClassesItem($prop_val);
             }
         }
         return $data;
     }
     $props = (new ReflectionClass($obj))->getProperties();
     foreach ($props as $prop) {
         $prop->setAccessible(true);
         if (isset($data[$prop->getName()])) {
             if (!is_array($data[$prop->getName()])) {
                 $prop->setValue($obj, $data[$prop->getName()]);
             } else {
                 $prop->setValue($obj, $this->prepareUserClassRelation($data[$prop->getName()]));
             }
         }
         unset($data[$prop->getName()]);
     }
     // set undeclared in model properties
     $this->setUndeclaredProperties($data, $obj);
     return $obj;
 }