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; }
/** * @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; }
/** * 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; }
/** * 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(); }