*/ class EntitySchemaCommand extends ContainerAwareCommand { protected function configure() { $this ->setName('irstea:plantuml:entities') ->setDescription("Génère un schéma PlantUML à partir des métadonnées de Doctrine."); } /** * * @param InputInterface $input * @param OutputInterface $output * * @SuppressWarnings(UnusedFormalParameter) */ protected function execute(InputInterface $input, OutputInterface $output) { /* @var $manager EntityManagerInterface */ $manager = $this->getContainer()->get('doctrine.orm.entity_manager'); $factory = $manager->getMetadataFactory(); $allMetadata = $factory->getAllMetadata(); $decorationFilter = new DirectoryFilter( [ realpath($this->getContainer()->getParameter('kernel.root_dir').'/../src') ] ); $bundleNamespace = 'Irstea\\SygadeBundle\\Entity\\'; $entityFilter = new NamespaceFilter([$bundleNamespace]); //$namespace = new BundleNamespace($this->getContainer()->getParameter('kernel.bundles')); $namespace = new MappedNamespace([$bundleNamespace => '']); $decorator = new FilteringDecorator( new CompositeDecorator([ new InheritanceDecorator(), new EntityDecorator($factory), new AssociationDecorator($factory), ]), $decorationFilter ); $visitor = new ClassVisitor($decorator, null, $namespace); foreach($allMetadata as $metadata) { /* @var $metadata ClassMetadata */ if ($entityFilter->accept($metadata->getReflectionClass())) { $visitor->visitClass($metadata->getName()); } } $writer = new OutputWriter($output); $writer->write("@startuml\n"); $visitor->outputTo($writer); $writer->write("@enduml\n"); } }