示例#1
0
 public static function defineClass($className, $extends = '')
 {
     //        $namespace = 'Eddmash\PowerOrm\Migration\Model';
     $namespace = '';
     $use = '';
     $extendedClass = '';
     if (empty($extends) || Model::isModelBase($extends)) {
         $extends = Model::getFullClassName();
     } else {
         $extendedClass = sprintf('%s%s', ClassHelper::getFormatNamespace($namespace, true), $extends);
         $use = sprintf('use %s;', $extendedClass);
         $extends = trim(substr($extends, strripos($extends, '\\')), '\\');
     }
     if (!StringHelper::isEmpty($extendedClass) && !ClassHelper::classExists($extendedClass, $namespace)) {
         self::$deferedClasses[$extends][] = ['class' => $className, 'extends' => $extends];
         return false;
     }
     $extends = ClassHelper::getNameFromNs($extends, $namespace);
     $class = sprintf(self::getTemplate(), $namespace, $use, $className, $extends);
     $className = sprintf('%s%s', ClassHelper::getFormatNamespace($namespace, true), $className);
     if (ArrayHelper::hasKey(self::$deferedClasses, $className)) {
         foreach (self::$deferedClasses[$className] as $deferedClass) {
             self::defineClass($deferedClass['class'], $deferedClass['extends']);
         }
     }
     if (!ClassHelper::classExists($className, $namespace)) {
         eval($class);
     }
     return $className;
 }
示例#2
0
 public function getConstructorArgs()
 {
     $constructorArgs = parent::getConstructorArgs();
     if (isset($constructorArgs['meta']) && empty($constructorArgs['meta'])) {
         unset($constructorArgs['meta']);
     }
     if (isset($constructorArgs['extends'])) {
         if (StringHelper::isEmpty($constructorArgs['extends']) || Model::isModelBase($constructorArgs['extends'])) {
             unset($constructorArgs['extends']);
         } else {
             $constructorArgs['extends'] = ClassHelper::getNameFromNs($constructorArgs['extends'], BaseOrm::getModelsNamespace());
         }
     }
     return $constructorArgs;
 }
示例#3
0
 /**
  * Takes a model returns a ModelState representing it.
  *
  * @param Model      $model
  * @param bool|false $excludeRels
  *
  * @return static
  *
  * @throws TypeError
  *
  * @since 1.1.0
  *
  * @author Eddilbert Macharia (http://eddmash.com) <*****@*****.**>
  */
 public static function fromModel($model, $excludeRels = false)
 {
     $fields = [];
     /** @var $field Field */
     foreach ($model->meta->localFields as $name => $field) {
         try {
             $fields[$name] = $field->deepClone();
         } catch (\Exception $e) {
             throw new TypeError(sprintf("Couldn't reconstruct field %s on %s: %s", $name, $model->meta->modelName));
         }
     }
     if ($excludeRels == false) {
         foreach ($model->meta->localManyToMany as $name => $field) {
             try {
                 $fields[$name] = $field->deepClone();
             } catch (\Exception $e) {
                 throw new TypeError(sprintf("Couldn't reconstruct field %s on %s: %s", $name, $model->meta->modelName));
             }
         }
     }
     $overrides = $model->meta->getOverrides();
     $meta = [];
     $ignore = ['registry'];
     foreach ($overrides as $name => $value) {
         if (in_array($name, $ignore)) {
             continue;
         }
         $meta[$name] = $value;
     }
     $extends = '';
     $parent = $model->getParent();
     if (!$parent->isAbstract() && !Model::isModelBase($parent->getName())) {
         $extends = ClassHelper::getNameFromNs($parent->getName(), BaseOrm::getModelsNamespace());
     }
     $kwargs = ['meta' => $meta, 'extends' => $extends];
     return new static($model->meta->modelName, $fields, $kwargs);
 }