Integrando Doctrine 2.1 com CodeIgniter 2.1.0
Requisitos:
- PHP 5.3+
- Apache rewrite_module habilitado
- Short_open_tag habilitado no PHP.
Downloads:
Extraindo o CodeIgniter:
Após o download do Doctrine/CodeIgniter e ter verificado as configurações de seu PHP e Apache, extraia o CodeIgniter em sua pasta /www/ como em uma instalação qualquer.
Em seguida faça o download do Doctrine e siga os passos à seguir.
Extraindo o Doctrine:
Assim que terminar o download do package do Doctrine, o arquivo virá com a basicamente essa estrutura de diretórios:
Você deve copiar o diretório “Doctrine” inteiro para a pasta /application/libraries/ do seu CodeIgniter. Resultando em algo parecido com isto:
Criando o plugin Doctrine:
Após ter feito a extração dos packages, será necessário criar um novo plugin para que possa ser carregado dentro do CodeIgniter.
Crie um novo arquivo PHP chamado Doctrine.php e salve ele dentro da pasta /application/libraries/Doctrine.php com o seguinte conteúdo.
<?php
use Doctrine\Common\ClassLoader,
Doctrine\ORM\Configuration,
Doctrine\ORM\EntityManager,
Doctrine\Common\Cache\ArrayCache,
Doctrine\DBAL\Logging\EchoSqlLogger;
class Doctrine {
public $em = null;
public function __construct()
{
// carrega as configurações do db do ci
require_once APPPATH.'config/database.php';
require_once APPPATH.'libraries/Doctrine/Common/ClassLoader.php';
$doctrineClassLoader = new ClassLoader('Doctrine', APPPATH.'libraries');
$doctrineClassLoader->register();
$entitiesClassLoader = new ClassLoader('models', rtrim(APPPATH, '/'));
$entitiesClassLoader->register();
$proxiesClassLoader = new ClassLoader('Proxies', APPPATH.'models/proxies');
$proxiesClassLoader->register();
// configurando os memcaches
$config = new Configuration;
$cache = new ArrayCache;
$config->setMetadataCacheImpl($cache);
$config->setQueryCacheImpl($cache);
// carregando os drivers
$Doctrine_AnnotationReader = new \Doctrine\Common\Annotations\AnnotationReader($cache);
$Doctrine_AnnotationReader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\');
$driver = new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($Doctrine_AnnotationReader, APPPATH.'models');
$config->setMetadataDriverImpl($driver);
// configuração de proxy
$config->setProxyDir(APPPATH.'/models/proxies');
$config->setProxyNamespace('Proxies');
$config->setAutoGenerateProxyClasses( TRUE );
// Database connection information
$connectionOptions = array(
'driver' => 'pdo_mysql',
'user' => $db['default']['username'],
'password' => $db['default']['password'],
'host' => $db['default']['hostname'],
'dbname' => $db['default']['database']
);
// cria EntityManager
$this->em = EntityManager::create($connectionOptions, $config);
}
}
OH YEAHHH!
Pronto. Seu Doctrine está integrado ao CodeIgniter.
Para usar os recursos como o EntityManager e outros, basta carregar a library dentro do seu controller:
$this->load->library("doctrine");
E em seguinda chamar o EntityManager:
$em = $this->doctrine->em;
Observações:
Existem também outras maneiras de se fazer essa integração, escolhi essa forma pois foi achei ela mais prática e simples. É possível também carregar o Doctrine no autoload do CI, como fazemos com qualquer outro plugin.
Algo interessante a se fazer também é criar sua própria extensão da classe Controller e já deixar o EntityManager pré carregado, pois ter que ficar usando toda vez “$em = $this->doctrine->em;” acaba sendo meio incômodo.
Sem mais, agora é só alegria.



Ola, gostei muito do post, se possivel gostaria postase falando mais doctrine 2
Opa, obrigado. E com certeza postarei mais coisas sobre Doctrine e CI também
Olá, concordo com o Covex, se possível gostaria que postasse um tuto com exemplo básico/prático para melhor forma de utilizar o Doctrine nos Models/Controllers do CI… Abraço.