Le blog du pangolin

Accueil > Programmation > PHP > CodeIgniter > Intégration de doctrine 2 à codeigniter 2

Intégration de doctrine 2 à codeigniter 2

dimanche 17 avril 2011, par Super Pangolin

/ !\ Attention : il vous faudra au moins PHP 5.3 avec doctrine 2.

Il faut charger copier le dossier « Doctrine » de doctrine dans le dossier « libraries » de votre application.

Ensuite, il faut créer une librairie « Doctrine.php » dans le dossier des librairies de votre application. Il contiendra le bootstrap de doctrine.

Sur plusieurs projets, j’accède à différentes bases de données. J’ai modifié le bootstrap de la documentation de doctrine comme ça :

<?php

use Doctrine\Common\ClassLoader,
Doctrine\ORM\Configuration,
Doctrine\ORM\EntityManager,
Doctrine\Common\Cache\ArrayCache,
Doctrine\DBAL\Logging\EchoSqlLogger;

class Doctrine {

   public $em = null;
   private $config = null;

   public function __construct() {

       // Autoloaders
       require_once APPPATH . 'libraries/Doctrine/Common/ClassLoader.php';

       $doctrineClassLoader = new ClassLoader('Doctrine', APPPATH . 'libraries');
       $doctrineClassLoader->register();
       $entitiesClassLoader = new ClassLoader('models', rtrim(APPPATH, "/"));
       $entitiesClassLoader->register();
       $entitiesClassLoader = new ClassLoader('Entities', APPPATH . "models");
       $entitiesClassLoader->register();
       $proxiesClassLoader = new ClassLoader('Proxies', APPPATH . 'models/proxies');
       $proxiesClassLoader->register();

       // Caches
       $config = new Configuration;
       $cache = new ArrayCache;
       $config->setMetadataCacheImpl($cache);
       $driverImpl = $config->newDefaultAnnotationDriver(array(APPPATH . 'models/Entities'));
       $config->setMetadataDriverImpl($driverImpl);
       $config->setQueryCacheImpl($cache);

       $config->setQueryCacheImpl($cache);

       // Proxy configuration
       $config->setProxyDir(APPPATH . '/models/proxies');
       $config->setProxyNamespace('Proxies');

       // Set up logger
       $logger = new EchoSqlLogger;
       $config->setSqlLogger($logger);

       $config->setAutoGenerateProxyClasses(TRUE);
       $this->config = $config;
   }

   function connexion($dbProfile) {
       // Charge le fichier de configuration de la base dans codeigniter
       require APPPATH . 'config/database.php';

       // Database connection information
       $connectionOptions = array(
           'driver' => 'pdo_mysql',
           'user' => $db[$dbProfile]['username'],
           'password' => $db[$dbProfile]['password'],
           'host' => $db[$dbProfile]['hostname'],
           'dbname' => $db[$dbProfile]['database']
       );

       // Create EntityManager
       $this->em[$dbProfile] = EntityManager::create($connectionOptions, $this->config);
       return $this->em[$dbProfile];
   }

}

Utilisation dans les contrôleurs :

<?php

class test extends MY_Controller {

   var $tData_i;

   function __construct() {
       parent::__construct();

       $this->load->library('Doctrine');
       $em = $this->doctrine->connexion('default');

       $q = $em->createQuery('select u from Entities\Utilisateurs u');

       $oResult_l = $q->getResult();

       echo "<pre>";
       var_dump($oResult_l);
       echo "</pre>";
    }
}

Messages

Un message, un commentaire ?

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.