Installation au SIF
Téléchargement de composer et préparation de l’installation
~/public_html/Archiweb$ mkdir TestDoctrine
~/public_html/Archiweb$ cd TestDoctrine
~/public_html/Archiweb/TestDoctrine$ curl -sS https://getcomposer.org/installer | php
~/public_html/Archiweb/TestDoctrine$ emacs composer.json
{
"require": {
"doctrine/orm": "*"",
"symfony/yaml": "*"
}
}
Installation de doctrine
$ php composer.phar install
Utilisation de doctrine au SIF
créer un fichier bootstrap.php
<?php
// bootstrap.php
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
require_once "vendor/autoload.php";
//METADATA YAML
$isDevMode=true;
$config = Setup::createYAMLMetadataConfiguration(array(__DIR__."/config/yaml"), $isDevMode);
// database configuration parameters
$dsn = array(
'dbname' => 'mmeynard',
'user' => 'mmeynard',
'password' => 'Le votre !',
'host' => 'venus', // '127.0.0.1' ne fonctionne pas car serveur MySQL sur venus
'driver' => 'pdo_mysql',
'charset' => 'utf8' , // sinon les char utf-8 ne passent pas en BD
);
// obtaining the entity manager
$entityManager = EntityManager::create($dsn, $config);
puis créer un fichier cli-config.php pour faire fonctionner la commande doctrine
<?php
// cli-config.php
require_once "bootstrap.php";
return \Doctrine\ORM\Tools\Console\ConsoleRunner::createHelperSet($entityManager);
puis créer en rétro-ingéniérie, les fichiers yaml dans /config/yaml définissant les métadonnées, puis les fichiers php dans le répertoire src définissant les classes d’entités
mkdir config/yaml
php vendor/bin/doctrine orm:convert-mapping --from-database yml config/yaml
mkdir src
php vendor/bin/doctrine orm:generate-entities src/
On listera le répertoire src qui contient les classes Etudiant, Options, Stagea : ls src; less Etudiant.php
on peut maintenant écrire un script php listant les étudiants (des stages d’analyse) : listetud.php : OUF !
<?php
include "src/Etudiant.php";
include "src/Options.php";
include "src/Stagea.php";
require_once "bootstrap.php";
$etudRep=$entityManager->getRepository('Etudiant');
$letud=$etudRep->findAll();
foreach($letud as $e){
print($e->getNom() . " " . $e->getPrenom() . "<br>");
}
?>
Afin de ne pas avoir à inclure chaque classe avant utilisation, on utilisera la fonctionnalité de chargement automatique fournie par doctrine :
use Doctrine\Common\ClassLoader;
require 'vendor/doctrine/common/lib/Doctrine/Common/ClassLoader.php';
$classLoader = new ClassLoader(null, 'src/'); // null : pas d'espace de nom
$classLoader->register();
Attention les instances d’étudiant récupérées font référence à des instances d’Options et de Stagea (qui font eux même référence à des étudiants grâce aux métadonnées) : ne pas faire de print_r car la récursivité risque d’être infinie !
foreach($letud as $e){
print($e->getNom() . " " . $e->getPrenom() . " : " .
($e->getOpt()?$e->getOpt()->getNom():"PAS D'OPTION") . "<br>");
}
permettra d’afficher :
GUILLAUME Julien : Langue naturelle
GUITARD Brice : Web et BD
HAET Franck : PAS D'OPTION
HERIZI Abderraouf : Bio-Informatique
…