. */ namespace Doctrine\ORM\Tools\Console\Command; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Doctrine\ORM\Tools\SchemaValidator; /** * Command to validate that the current mapping is valid. * * @license http://www.opensource.org/licenses/mit-license.php MIT * @link www.doctrine-project.com * @since 1.0 * @author Benjamin Eberlei * @author Guilherme Blanco * @author Jonathan Wage * @author Roman Borschel */ class ValidateSchemaCommand extends Command { /** * {@inheritdoc} */ protected function configure() { $this ->setName('orm:validate-schema') ->setDescription('Validate the mapping files.') ->addOption( 'skip-mapping', null, InputOption::VALUE_NONE, 'Skip the mapping validation check' ) ->addOption( 'skip-sync', null, InputOption::VALUE_NONE, 'Skip checking if the mapping is in sync with the database' ) ->setHelp( <<getHelper('em')->getEntityManager(); $validator = new SchemaValidator($em); $exit = 0; if ($input->getOption('skip-mapping')) { $output->writeln('[Mapping] Skipped mapping check.'); } elseif ($errors = $validator->validateMapping()) { foreach ($errors as $className => $errorMessages) { $output->writeln("[Mapping] FAIL - The entity-class '" . $className . "' mapping is invalid:"); foreach ($errorMessages as $errorMessage) { $output->writeln('* ' . $errorMessage); } $output->writeln(''); } $exit += 1; } else { $output->writeln('[Mapping] OK - The mapping files are correct.'); } if ($input->getOption('skip-sync')) { $output->writeln('[Database] SKIPPED - The database was not checked for synchronicity.'); } elseif (!$validator->schemaInSyncWithMetadata()) { $output->writeln('[Database] FAIL - The database schema is not in sync with the current mapping file.'); $exit += 2; } else { $output->writeln('[Database] OK - The database schema is in sync with the mapping files.'); } return $exit; } }