Accueil > Programmation > PHP > CodeIgniter > Intégration de doctrine 2 à codeigniter 2
Intégration de doctrine 2 à codeigniter 2
dimanche 17 avril 2011, par
/ !\ 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
1. Intégration de doctrine 2 à codeigniter 2, 28 juin 2011, 22:01, par fred
bonjour,
interessant sauf que normalement on utilise pas de requete sql de quelque maniere que se soit dans un controleur.
Un controleur n’est la que pour , comme sont nom l’indique, effectuer des controles.
Il faut utiliser des classes DAO pour les acces bases , ou dans les classes model étant donné que les bases sont directement reliés au models.
fred
1. Intégration de doctrine 2 à codeigniter 2, 29 juin 2011, 12:26, par Super Pangolin
Fred a bien sûr raison.
Pour l’exemple, j’ai utilisé le raccourci (malheureux, peut-être ?) d’exécuter ma requête dans le contrôleur.
Pour mes développements professionnels, j’ai personnalisé mes modèles en créant une classe MY_model intégrant doctrine.