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 Difference|array $differences */ 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 Difference|array $differences */ 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])); } } } }