Jarves\Command\ObjectsCommand::execute PHP Method

execute() protected method

protected execute ( Symfony\Component\Console\Input\InputInterface $input, Symfony\Component\Console\Output\OutputInterface $output )
$input Symfony\Component\Console\Input\InputInterface
$output Symfony\Component\Console\Output\OutputInterface
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $jarves = $this->getJarves();
        $filterByObjectKey = $input->getArgument('object-key');
        $filterByBundle = false;
        if ($filterByObjectKey) {
            $filterByBundle = explode('/', $filterByObjectKey)[0];
        }
        $verbose = !!$filterByObjectKey ?: $input->getOption('verbose');
        foreach ($jarves->getConfigs() as $bundleConfig) {
            if ($filterByBundle && $filterByBundle !== $bundleConfig->getName()) {
                continue;
            }
            $output->writeln(sprintf(PHP_EOL . '<info>Bundle @%s:</info>', $bundleConfig->getBundleName()));
            $objects = $bundleConfig->getObjects();
            if (!$objects) {
                $output->writeln('  - objects.');
            } else {
                if ($verbose) {
                    foreach ($objects as $object) {
                        if ($filterByObjectKey && $filterByObjectKey !== $object->getKey()) {
                            continue;
                        }
                        $output->writeln(sprintf('<info> Object: %s</info>', $object->getKey()));
                        $output->writeln(sprintf(' =================================================================='));
                        $table = new Table($output);
                        $table->setStyle('compact');
                        $table->setHeaders(['property', 'value']);
                        foreach ($object->toArray() as $key => $value) {
                            if ('browserOptions' === $key || 'fields' === $key || 'browserColumns' === $key) {
                                $newValue = [];
                                foreach ($value as $field) {
                                    $line = sprintf('<info>%s</info> (%s): %s', $field['id'], $field['type'], @$field['label']);
                                    if ($field['type'] === 'object') {
                                        $line .= sprintf(' (->%s %s)', $field['object'], $field['objectRelation']);
                                    }
                                    $newValue[] = $line;
                                }
                                $value = join("\n", $newValue);
                            } else {
                                if (null === $value) {
                                    $value = 'null';
                                } else {
                                    if (is_array($value)) {
                                        $value = json_encode($value);
                                    } else {
                                        if (is_bool($value)) {
                                            $value = $value ? 'true' : 'false';
                                        } else {
                                            if (!is_scalar($value)) {
                                                $value = $value->toArray();
                                            } else {
                                                if (is_scalar($value)) {
                                                } else {
                                                    continue;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            $table->addRow([$key, $value]);
                        }
                        $relations = [];
                        foreach ($object->getRelations() as $relation) {
                            $relations[] = sprintf('<info>%s</info> (%s) -> %s', $relation->getName(), $relation->getType(), $relation->getForeignObjectKey());
                        }
                        $relations = join("\n", $relations);
                        $table->addRow(['relations', $relations]);
                        $table->render();
                        $output->writeln('');
                        $output->writeln(' REST API Controller');
                        /** @var $router \Symfony\Component\Routing\Router */
                        $router = $this->getContainer()->get('router');
                        /** @var $collection \Symfony\Component\Routing\RouteCollection */
                        $collection = $router->getRouteCollection();
                        $allRoutes = $collection->all();
                        $table = new Table($output);
                        $table->setStyle('compact');
                        $table->setHeaders(['Http method', 'path', 'controller']);
                        /** @var $route \Symfony\Component\Routing\Route */
                        foreach ($allRoutes as $route) {
                            if ($route->getDefault('_jarves_object') === $object->getKey()) {
                                $table->addRow([join(',', $route->getMethods()), $route->getPath(), $route->getDefault('_controller')]);
                            }
                        }
                        $table->render();
                    }
                } else {
                    $table = new Table($output);
                    $table->setHeaders(['key', 'label', 'labelField', 'table']);
                    foreach ($objects as $object) {
                        $table->addRow([$object->getKey(), $object->getLabel(), $object->getLabelField(), $object->getTable()]);
                    }
                    $table->render();
                }
            }
        }
    }
ObjectsCommand