Projeto PHP OO e engenharia reversa com Doctrine
Sabe aquele tempo que você perdia criando as entidades, uma por uma? Pois bem, seus problemas acabaram! Brincadeira à parte.
Sabe aquele tempo que você perdia criando as entidades, uma por uma? Pois bem, seus problemas acabaram! Brincadeira à parte, vamos a um exemplo simples de exportação de um mapeamento na base de dados e transformar em entidades. Talvez haja a necessidade, para adaptar às nossas necessidades, de modificar coisas pontuais nas annotations criadas.
Abaixo, temos nosso modelo de exemplo, uma entidade Usuário e seus endereços. Para modos de curiosidade, modelei usando o Mysql Workbench.
Agora, vem o código e exportação do mapeamento para classes PHP. Vejamos o código abaixo, devidamente comentado:
<?php //Importar o autoload require_once "vendor/autoload.php"; use Doctrine\ORM\Tools\DisconnectedClassMetadataFactory; use Doctrine\ORM\Tools\Export\ClassMetadataExporter; use Doctrine\ORM\Tools\EntityGenerator; use Doctrine\ORM\Mapping\Driver\DatabaseDriver; //Setando a pasta onde ficará o código fonte de nossa aplicação $config = \Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration(array(__DIR__."/src"), true); //Dados do Banco de dados $connection = array( 'dbname' => 'imasters', 'user' => 'root', 'password' => 'root', 'host' => '127.0.0.1', 'driver' => 'pdo_mysql', ); //Criando o EntityManager (Gerenciador de entidade) $entityManager = \Doctrine\ORM\EntityManager::create($connection, $config); //Lendo o banco de dados, criando o driver $driver = new DatabaseDriver($entityManager->getConnection()->getSchemaManager()); //Setando o Namespace ao driver $driver->setNamespace('App\\Entity\\'); $entityManager->getConfiguration()->setMetadataDriverImpl($driver); //Preparando para realizar o mapeamento $classMetaData = new DisconnectedClassMetadataFactory(); $classMetaData->setEntityManager($entityManager); $metadata = $classMetaData->getAllMetadata(); //Criamos o exporter, informando que a classe exportada conterá annotations, poderia ser XML, YAML, YML ou PHP // E setamos a pasta do nosso projeto onde ficarão as entidades conforme o NameSpace que setamos anteriormente $exporter = (new ClassMetadataExporter())->getExporter('annotation', 'src/'); //Criamos o gerador de entidades colocando-o no exporter, jutamento com os metadados vindos do mapeamento. $exporter->setEntityGenerator(new EntityGenerator()); $exporter->setMetadata($metadata); //Exportamos! $exporter->export();
Vamos executar este arquivo. Pode ser no browser ou utilizando o terminal, na pasta do projeto escrevendo “php export.php”. Após a execução, caso não haja problemas com permissão de pasta, nossas entidades estão lá, veja:
Grande abraço e até a próxima!