예제 #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
파일: Loader.php 프로젝트: eddmash/powerorm
 /**
  * @return array
  *
  * @throws ClassNotFoundException
  *
  * @since 1.1.0
  *
  * @author Eddilbert Macharia (http://eddmash.com) <*****@*****.**>
  */
 public function getMigrationsClasses()
 {
     $migrationFiles = $this->getMigrationsFiles();
     $classes = [];
     $namespace = BaseOrm::getMigrationsNamespace();
     foreach ($migrationFiles as $migrationFile) {
         $className = ClassHelper::getClassNameFromFile($migrationFile, BaseOrm::getMigrationsPath());
         $foundClass = ClassHelper::classExists($className, $namespace);
         if (!$className) {
             throw new ClassNotFoundException(sprintf('The class [ %2$s\\%1$s or \\%1$s ] could not be located', $className, $namespace));
         }
         $classes[] = $foundClass;
     }
     return $classes;
 }
예제 #3
0
 /**
  * Returns a list of all model names in lowercase or false if not models were found.
  *
  * @return array|bool
  *
  * @throws ClassNotFoundException
  *
  * @since 1.1.0
  *
  * @author Eddilbert Macharia (http://eddmash.com) <*****@*****.**>
  */
 public function getModelClasses()
 {
     $models = [];
     $modelFiles = $this->getModelFiles();
     if (empty($modelFiles)) {
         return false;
     }
     $namespace = BaseOrm::getModelsNamespace();
     foreach ($this->getModelFiles() as $file) {
         $className = ClassHelper::getClassNameFromFile($file, BaseOrm::getModelsPath());
         $foundClass = ClassHelper::classExists($className, $namespace);
         if (!$foundClass) {
             throw new ClassNotFoundException(sprintf('The class [ %1$s\\%2$s or \\%1$s ] could not be located', $className, $namespace));
         }
         $models[] = $foundClass;
     }
     return $models;
 }
예제 #4
0
 /**
  * Defines a new model class.
  *
  * we create a new namespace and define new classes because, we might be dealing with a model that has been dropped
  * Meaning if we try to load the model using the normal way, we will get and error of model does not exist.
  *
  * @param string $className
  * @param string $extends
  *
  * @return Model
  *
  * @since 1.1.0
  *
  * @author Eddilbert Macharia (http://eddmash.com) <*****@*****.**>
  */
 private static function createInstance($className, $extends = '')
 {
     if (!ClassHelper::classExists($className, BaseOrm::getModelsNamespace())) {
         MigrationModel::defineClass($className, $extends);
     }
     return new $className();
 }