Dev (Back & Front)ARTIGO

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!

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.

imagem01

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:

imagem02-

Grande abraço e até a próxima!

Eder Taveira é engenheiro de software formado pela Universidade Federal do Pará. Também é pós graduado em: Análise de Sistemas Orientados a Objetos, Arquitetura de Software e Desenvolvimento Mobile. Atua há 15 anos no mercado de tecnologia trabalhando inclusive em empresas internacionais como Ford Motors, Turing e The Home Depot. Em plataformas como Udemy e YouTube, Eder tem disponível cursos e dicas voltados para a área de T.I.

Ver perfil