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:

estrutura doctrine

Estrutura Doctrine

Você deve copiar o diretório “Doctrine” inteiro para a pasta /application/libraries/ do seu CodeIgniter. Resultando em algo parecido com isto:

estrutura codeigniter

Estrutura CI

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.

Tags:, , , , , , ,

3 Responses to “Integrando Doctrine 2.1 com CodeIgniter 2.1.0”

  1. coxev says :

    Ola, gostei muito do post, se possivel gostaria postase falando mais doctrine 2

  2. Flip says :

    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.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.