/** * @param Database $database */ public function generate(Database $database) { foreach ($database->getTables() as $table) { // Create namespace and inner class $namespace = new PhpNamespace($this->resolver->resolveRepositoryNamespace($table)); $class = $namespace->addClass($this->resolver->resolveRepositoryName($table)); // Detect extends class if (($extends = $this->config->get('repository.extends')) !== NULL) { $namespace->addUse($extends); $class->setExtends($extends); } // Save file $this->generateFile($this->resolver->resolveRepositoryFilename($table), (string) $namespace); } // Generate abstract base class if ($this->config->get('repository.extends') !== NULL) { // Create abstract class $namespace = new PhpNamespace($this->config->get('repository.namespace')); $class = $namespace->addClass(Helpers::extractShortName($this->config->get('repository.extends'))); $class->setAbstract(TRUE); // Add extends from ORM/Repository $extends = $this->config->get('nextras.orm.class.repository'); $namespace->addUse($extends); $class->setExtends($extends); // Save file $this->generateFile($this->resolver->resolveFilename(Helpers::extractShortName($this->config->get('repository.extends')), $this->config->get('repository.folder')), (string) $namespace); } }
/** * @param Database $database */ public function generate(Database $database) { foreach ($database->getTables() as $table) { // Create namespace and inner class $namespace = new PhpNamespace($this->resolver->resolveEntityNamespace($table)); $class = $namespace->addClass($this->resolver->resolveEntityName($table)); // Detect extends class if (($extends = $this->config->get('entity.extends')) === NULL) { $extends = $this->config->get('nextras.orm.class.entity'); } // Add namespace and extends class $namespace->addUse($extends); $class->setExtends($extends); // Add table columns foreach ($table->getColumns() as $column) { if ($this->config->get('generator.entity.exclude.primary')) { if ($column->isPrimary()) { continue; } } foreach ($this->decorators as $decorator) { $decorator->doDecorate($column, $class, $namespace); } } // Save file $this->generateFile($this->resolver->resolveEntityFilename($table), (string) $namespace); } // Generate abstract base class if ($this->config->get('entity.extends') !== NULL) { // Create abstract class $namespace = new PhpNamespace($this->config->get('entity.namespace')); $class = $namespace->addClass(Helpers::extractShortName($this->config->get('entity.extends'))); $class->setAbstract(TRUE); // Add extends from ORM/Entity $extends = $this->config->get('nextras.orm.class.entity'); $namespace->addUse($extends); $class->setExtends($extends); // Save file $this->generateFile($this->resolver->resolveFilename(Helpers::extractShortName($this->config->get('entity.extends')), $this->config->get('entity.folder')), (string) $namespace); } }
/** * @param string * @param string * @param string * @throws InvalidStateException * @return self */ public function addUse(string $name, string $alias = NULL, string &$aliasOut = NULL) : self { $name = ltrim($name, '\\'); if ($alias === NULL && $this->name === Helpers::extractNamespace($name)) { $alias = Helpers::extractShortName($name); } if ($alias === NULL) { $path = explode('\\', $name); $counter = NULL; do { if (empty($path)) { $counter++; } else { $alias = array_pop($path) . $alias; } } while (isset($this->uses[$alias . $counter]) && $this->uses[$alias . $counter] !== $name); $alias .= $counter; } elseif (isset($this->uses[$alias]) && $this->uses[$alias] !== $name) { throw new InvalidStateException("Alias '{$alias}' used already for '{$this->uses[$alias]}', cannot use for '{$name}'."); } $aliasOut = $alias; $this->uses[$alias] = $name; return $this; }
/** * @param string * @return ClassType */ public function addTrait(string $name) : ClassType { return $this->addNamespace(Helpers::extractNamespace($name))->addTrait(Helpers::extractShortName($name)); }
/** * @param string * @return ClassType */ public function addTrait($name) { return $this->addNamespace(Helpers::extractNamespace($name))->addTrait(Helpers::extractShortName($name)); }