Por Jean Hertel, 15/02/2017, na categoria Dicas
Olá leitores,
Hoje vou mostrar uma maneira simples e fácil de configurar o ORM do Doctrine no framework Silex.
Por padrão o Silex já traz um provider chamado DoctrineServiceProvider. Este provider nos permite conectar a uma base de dados com o Doctrine DBAL. Isto por si só já é uma mão na roda para ter uma abstração melhor da base de dados, mas não dá nenhuma melhoria significativa em relação a gestão dos objetos criados. Para esta finalidade, existe o Doctrine ORM, que faz o encapsulamento de toda essa tradução de consultas no banco para objetos php.
Para instalar o ORM existem diversas opções de providers, sendo possível até mesmo configurar tudo na mão. Para o nosso exemplo vamos usar o Doctrine ORM Service Provider do dFlyDev.
Antes de mais nada, instale o pacote com o comando:
composer install dflydev/doctrine-orm-service-provider
Existem diversas opções de configurações, e não vou falar de todas elas. A que eu uso normalmente é a leitura das entidades através de annotations.
<?php
$app->register(new DoctrineOrmServiceProvider, [
'orm.proxies_dir' => 'src/App/Entity/Proxy',
'orm.auto_generate_proxies' => $app['debug'],
'orm.em.options' => [
'mappings' => [
[
'type' => 'annotation',
'namespace' => 'App\\Entity\\',
'path' => 'src/App/Entity',
'use_simple_annotation_reader' => false,
],
],
]
]);
Com o código acima iremos registrar o ORM para ler as annotations das clases que se encontrem no diretorio src/App/Entity
com o namespace App\Entity
.
Por fim, o Doctrine não vai conseguir localizar nossas classes apenas com as informações acima, ele precisa de um class Loader. Como estamos usando o composer, podemos utilizar seu class Loader da seguinte forma:
<?php
use Doctrine\Common\Annotations\AnnotationRegistry;
$loader = require_once __DIR__ . '/vendor/autoload.php';
AnnotationRegistry::registerLoader([$loader, 'loadClass']);
Você pode ver um exemplo completo e funcional neste link.