Пример #1
0
 /**
  * @param ActiveRow $activeRow
  * @param $tableName
  * @throws InvalidStateException
  * @return HyperRow
  */
 public function createRow(ActiveRow $activeRow, $tableName)
 {
     $className = Helpers::substituteClassWildcard($this->rowMapping, $tableName);
     $baseClass = HyperRow::class;
     if (!class_exists($className) || !is_subclass_of($className, $baseClass)) {
         throw new InvalidStateException("HyperRow class {$className} does not exist or does not extend {$baseClass}.");
     }
     $names = $this->container->findByType($className);
     if (count($names) > 1) {
         throw new InvalidStateException("Multiple services of type {$className} found: " . implode(', ', $names) . '.');
     } elseif (count($names) == 0) {
         $inst = $this->container->createInstance($className);
     } else {
         $name = array_shift($names);
         $inst = $this->container->createService($name);
     }
     /** @var HyperRow $inst */
     $inst->setFactory($this);
     $inst->setActiveRow($activeRow);
     return $inst;
 }
Пример #2
0
 /**
  * Returns properly formatted FQN with backslash at the beginning or class name if the provided $fqn
  * has the same namespace as $contextClassNamespace
  *
  * @param string $fqn
  * @param string $contextClassNamespace
  * @return string
  */
 public static function formatClassName($fqn, $contextClassNamespace)
 {
     $result = Helpers::extractClassName($fqn);
     $classNamespace = Helpers::extractNamespace($fqn);
     if ($classNamespace != $contextClassNamespace) {
         $result = $fqn;
         if (!Strings::startsWith($result, '\\')) {
             $result = '\\' . $result;
         }
     }
     return $result;
 }
Пример #3
0
 /**
  * @param string $type selection|row
  * @param string $tableName
  */
 protected function generateTableClass($type, $tableName)
 {
     $classFqn = $this->config['classes'][$type]['mapping'];
     $classFqn = Helpers::substituteClassWildcard($classFqn, $tableName);
     $className = Helpers::extractClassName($classFqn);
     $classNamespace = Helpers::extractNamespace($classFqn);
     $extendsFqn = $this->config['classes'][$type]['generated'];
     $extendsFqn = Helpers::substituteClassWildcard($extendsFqn, $tableName);
     $extends = Helpers::formatClassName($extendsFqn, $classNamespace);
     $dir = $this->config['dir'] . '/' . 'tables' . '/' . $tableName;
     $this->generateEmptyClass($classNamespace, $className, $extends, $dir);
 }