TD Doctrine 2
📢 Bonjour à tous et à toutes ❗

Pourquoi ce choix ? :
- Pour vous faire travailler sur d’autres ressources que les miennes et découvrir que le web fourmille d’excellentes ressources (mais y a du buggé ou de l’outdated aussi, malheureusement )
- Parce qu’il est très bien fait et qu’il nous servira de base pour Doctrine 2.0
- Parce que la v3 de doctrine est dans les tuyaux et j’avoue avoir la flemme de faire un cours complet sur doctrine 2 pour après le mettre à jour avec la V3 👅
- Parceque un bon développeur sait s’économiser et être écolo en pratiquant la réutilisation de code (oui oui, ce n’est pas de la fain….) 😄
“ The Doctrine Project is the home to several PHP libraries primarily focused on database storage and object mapping. The core projects are the Object Relational Mapper (ORM) and the Database Abstraction Layer (DBAL) it is built upon.
Doctrine has been downloaded a total of 2,222,562,433 times!”“ Doctrine est un ORM (couche d’abstraction à la base de données) pour PHP. Il s’agit d’un logiciel libre sous licence GNU LGPL.
Doctrine est l’ORM par défaut du framework Symfony(depuis la version 1.3 de ce framework). Cependant son utilisation dans le cadre d’un projet développé avec Symfony est optionnelle.
De plus, il peut être utilisé avec de nombreux autres frameworks tels que Zend Framework, CodeIgniter, FLOW3 ou encore Lithium.”
On va donc voir ensemble comment installer, configurer et utiliser les opérations de base de l’ORM Doctrine (qui est l’un si ce n’est le plus utilisé avec PhP) via la modélisation et la réalisation d’une application simple de gestion de sondages.
L’ORM se place en interface entre un programme applicatif , ici notre WEB APP en Php, et une base de données relationnelle ( MySQL) pour simuler une base de données orientée objet. Ce programme définit des correspondances entre les schémas de la base de données et les classes du programme applicatif.
En résumé dans notre code php on va donner des instructions à l’orm pour qu’il sauvegarde, crée, modifie, supprime nos objets ou leurs propriétés très facilement sans passer par nos bonnes vieilles requêtes mysqli ou PDO (depuis php5.1).
Crée en 2066 il s’inspire d’un autre ORM très célèbre qui est hibernate pour la techno Java.
Il a aussi son langage de requête orienté objet, le Doctrine Query Langage (DQL).
Il peut être utilisé à la place du langage SQL pour créer les requêtes d’accès et de manipulation des données de la base de données. Sa syntaxe s’inspire du Hibernate Query Langage, le langage de requête d', et du Java Persistence Query Language, celui de JPA.
Doctrine se compose de 2 grandes parties :
- Doctrine ORM (la liaison entre nos objets et notre BDD s’appuie sur DBAL)
- Doctrine DBAL (DataBase Abstraction Layer, Couche d’abstraction de base de données en français) qui s’appuie sur PDO (Php Data Object)
Paramétrons notre environnement de développement (ça va être simple … 😄) afin de pouvoir démarrer le TD :
TODO 🎢:
Télécharger
PUISinstaller
(une version qui supporte php 7+) :->ICI <-.
- On le mettra dans un dossier le plus proche de la racine
- On installera a minima
/
MySQL /
/
Télécharger
PUISinstaller
Visual Studio Code :->ICI <- .
Installer les 2 extensions de Felix Becker (Un grand merci à lui au passage, la première pour le debuggage, la seconde pour le linter ) pour VSC : CTRL + SHIFT + X puis tapez PHP, c’est simple ce sont les 2 et 3 ieme les plus téléchargées (donc tout en haut) →→→
Il faudra peut-être redémarrer entre-temps VSC, faites lui plaisir, faites le s’il vous le demande.
Ouvrez un répertoire de travail File -> Open Folder puis
- On va dans le menu des fichiers en haut à gauche CTRL + SHIFT + E
- Ensuite soit on clique sur le symbole situé en (1) soit on fait File -> New file, soit on fait CTRL + N pour créer un nouveau fichier que l’on va enregistrer CTRL + S en tant que hellodoctrine
.php
- Et ensuite on entre à l’intérieur le code suivant :
<?php
echo "hello doctrine";
phpinfo();
- Lancez-le dans votre navigateur via votre serveur local afin de vous assurez que vous êtes bien en php7+ (si ce n’est pas le cas, faites le nécessaire afin d’avoir votre serveur local en php v7+ de fonctionnel, cf cours précédents).
- Passons aux choses sérieuses, on va installer
Composer->ICI <-
- Cliquez sur download, pour ceux sur Windows,
Télécharger
PUISInstaller
l’exécutable, pour les autres, suivez la doc officielle - Dans les settings, vérifier que le chemin est bien celui de l’interpréteur php que vous allez lancer (vous pouvez en avoir plusieurs, a vous de choisir).
- Si vous ne voyez rien, faites browse et allez dans le dossier d’installation de votre xampp, dans le sous-dossier php :
- Puis on fait Next en lisant bien ce qui est écrit et en réagissant au besoin.
- Dans notre dossier ouvert sur Visual Studio Code on fait un clic
DROIT
sur notre fichier puisopen in integrated terminal
(ou alors vous ouvrez un powershell/CMD/Windows Terminal dans le dossier) puis vous tapez la commande :
- Si vous ne voyez rien, faites browse et allez dans le dossier d’installation de votre xampp, dans le sous-dossier php :
- Cliquez sur download, pour ceux sur Windows,
composer require doctrine/orm:^2.5
Ce qui nous donne :

Composer va faire le boulot pour nous, tout télécharger et installer dans notre dossier de travail →→→
- Passons à sa configuration (copiez-coller le code suivant dans un fichier bootstrap
.php
):
<?php
require_once join(DIRECTORY_SEPARATOR, [__DIR__, 'vendor',
'autoload.php']);
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
$entitiesPath = [
join(DIRECTORY_SEPARATOR, [__DIR__, "src", "Entity"])
];
$isDevMode = true;
$proxyDir = null;
$cache = null;
$useSimpleAnnotationReader = false;
// Connexion à la base de données
$dbParams = [
'driver' => 'pdo_mysql',
'host' => 'localhost',
'charset' => 'utf8',
'user' => 'root',
'password' => '',
'dbname' => 'poll',
];
$config = Setup::createAnnotationMetadataConfiguration(
$entitiesPath,
$isDevMode,
$proxyDir,
$cache,
$useSimpleAnnotationReader
);
$entityManager = EntityManager::create($dbParams, $config);
return $entityManager;
- Puis créons un autre fichier pour finaliser la configuration de Doctrine (copiez-coller le code suivant dans un fichier cli-config
.php
):
<?php
#### cli-config.php
$entityManager = require_once join(DIRECTORY_SEPARATOR, [__DIR__, 'bootstrap.php']);
use Doctrine\ORM\Tools\Console\ConsoleRunner;
return ConsoleRunner::createHelperSet($entityManager);
- On vérifie que tout est bon en tappant la commande suivante dans l’invite de commande :
vendor/bin/doctrine
PS : Quand tout est bon on a pas d’erreur à la fin et on peut taper nos lignes de commandes pour Doctrine 😄
- Pour finir on va configurer Composer pour qu’il gère l’autoloading, pour ce faire modifier le fichier config.json avec le code suivant :
{
"require": {
"doctrine/orm": "2.5"
},
"autoload": {
"psr-4": {
"Tuto\\": "src/"
}
}
}

- On recharge la configuration de l’autoloader de Composer via la commande suivante :
composer dump-autoload

Merci de garder pour vous les ressources que vous y trouverez et de ne pas les diffuser 😏
Merci de m’avertir de toute erreur ou coquille qui m’auraient échapées 😍
©️ 🚫 Do not distribute 😌