addOption( 'filter', null, InputOption::VALUE_OPTIONAL, "Filter the type of difference to display (ex: 'MISSING_PROPERTY')." ); $this->addOption( 'csv', null, InputOption::VALUE_NONE, "Print the result in CSV format." ); $this->addOption( 'snippets', null, InputOption::VALUE_NONE, "Make snippets of the missing classes and fields" ); } protected function execute(InputInterface $input, OutputInterface $output): int { $filter = $input->getOption('filter') ? DiffTypeEnum::from($input->getOption('filter')) : null; $diff = $this->schemaValidationService->validateSchema($filter); foreach ($diff as $entity => $value) { if (empty($value)) { continue; } if ($input->getOption('csv')) { $this->printCsv($output, $entity, $value); } else { $this->printVerbose($output, $entity, $value); } } if ($diff) { $count = 0; foreach ($diff as $entity => $value) { $count += (is_array($value) ? count($value) : 1); } $output->writeln($count . " differences found"); } else { $output->writeln("No difference found"); } if ($input->getOption('snippets')) { $this->schemaSnippetsMaker->makeSnippets($diff); $output->writeln("Snippets generated"); } return 0; } /** * @param OutputInterface $output * @param string $entity * @param Difference|array $differences * @return void */ protected function printVerbose(OutputInterface $output, string $entity, Difference | array $differences): void { $output->writeln($entity); if (!is_array($differences)) { $output->writeln($differences->getType()->value . " : " . $differences->getMessage()); } else { foreach ($differences as $field => $difference) { $output->writeln(" * " . $field . " - " . $difference->getType()->value . " : " . $difference->getMessage()); } } $output->writeln("\n"); } /** * @param OutputInterface $output * @param string $entity * @param Difference|array $differences * @return void */ protected function printCsv(OutputInterface $output, string $entity, Difference | array $differences): void { if (!is_array($differences)) { $output->writeln(implode(';', [$entity, '', $differences->getType()->value])); } else { foreach ($differences as $field => $difference) { $output->writeln(implode(';', [$entity, $field, $difference->getType()->value])); } } } }