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