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
…