/** * Execute this command. * * @return int * * @since 2.0 */ protected function doExecute() { $package = $this->getArgument(0); if (!$package) { throw new WrongArgumentException('Please enter package name.'); } $package = ConsoleHelper::getAllPackagesResolver()->getPackage($package); if (!$package) { throw new \InvalidArgumentException(sprintf('Package: %s not found', $this->getArgument(0))); } $recordClass = $this->getArgument(1); if (!$recordClass) { throw new WrongArgumentException('Please enter record name or class.'); } $recordClass = StringNormalise::toClassNamespace($recordClass); $pkgNamespace = ReflectionHelper::getNamespaceName($package); if (!class_exists($recordClass)) { $recordClass = $pkgNamespace . '\\Record\\' . ucfirst($recordClass) . 'Record'; } $table = null; if (class_exists($recordClass)) { try { /** @var Record $record */ $record = new $recordClass(); $table = $record->getTableName(); } catch (\Exception $e) { // Nothing } } if ($this->getArgument(2)) { $table = $this->getArgument(2); } $columns = Ioc::getDatabase()->getTable($table, true)->getColumnDetails(true); $fields = []; $dataType = Ioc::getDatabase()->getTable($table)->getDataType(); foreach ($columns as $column) { $fields[] = ['name' => $column->Field, 'type' => $dataType::getPhpType(explode('(', $column->Type)[0])]; } // Prepare Trait name $name = end(explode('\\', $recordClass)); $name = str_replace('Record', '', $name); $shortName = ucfirst($name) . 'DataTrait'; $data = ['package_namespace' => $pkgNamespace . '\\Record\\Traits', 'short_name' => $shortName, 'columns' => $fields]; $content = (new Edge(new EdgeStringLoader()))->render($this->getTemplate(), $data); $file = $package->getDir() . '/Record/Traits/' . $shortName . '.php'; if (is_file($file) && !(new BooleanPrompter())->ask('File: <comment>' . $file . '</comment> exists, do you want to override it? [N/y]: ', false)) { throw new \RuntimeException(' Canceled...'); } File::write($file, $content); $this->out()->out('Writing file: <info>' . $file . '</info> success.'); return true; }
/** * onAfterRouting * * @param Event $event * * @return void */ public function onAfterRouting(Event $event) { /** @var WebApplication $app */ $app = $event['app']; $package = $app->getPackage(); // In Warder if ($this->warder->isEnabled()) { RecordResolver::addNamespace(ReflectionHelper::getNamespaceName($this->warder) . '/Admin/Record', PriorityQueue::LOW); DataMapperResolver::addNamespace(ReflectionHelper::getNamespaceName($this->warder) . '/Admin/DataMapper', PriorityQueue::LOW); FieldDefinitionResolver::addNamespace(ReflectionHelper::getNamespaceName($package) . '/Form'); } // Frontend if ($this->warder->isFrontend()) { $package->getMvcResolver()->addNamespace(ReflectionHelper::getNamespaceName($this->warder), PriorityQueue::BELOW_NORMAL); FieldDefinitionResolver::addNamespace(ReflectionHelper::getNamespaceName($this->warder) . '\\Form'); } elseif ($this->warder->isAdmin()) { $package->getMvcResolver()->addNamespace(ReflectionHelper::getNamespaceName($this->warder) . '\\Admin', PriorityQueue::BELOW_NORMAL); FieldDefinitionResolver::addNamespace(ReflectionHelper::getNamespaceName($this->warder) . '\\Admin\\Form'); } }