Propel, la puissante couche d’abstraction de Symfony
Date de publication : 6 octobre 2008Par : youknowriad
Comme je l’avait mentionné dans l’article sur l’architecture MVC, Symfony s’appuie grandement sur la couche d’abstraction de données “Propel” (on peut modifier cette couche par “Doctrine” par exemple). C’est certainement l’une des parties les plus importantes du Framework Symfony. Propel vous fait gagner un temps fou dans la manipulation des données issus de vos bases de données.
Que est-ce qu’une couche d’abstraction de données ?
D’un point de vue matériel, une couche d’abstraction est l’ensemble des pilotes permettant aux applications d’accéder facilement aux différents périphériques. De la même manière, une couche d’abstraction de données vous permet d’accéder à vos bases de données de façon très simple et complètement indépendante du SGBD.
La puissance de propel :
La meilleure manière d’illustrer cette puissance est de faire un petit tutorial Symfony qui fera les actions suivantes : création de la base de données et des structures de données permettant l’accès à votre base et ceci en 5 minutes.
Alors pour faire tout ceci, la seule “véritable tache” après avoir créé votre projet Symfony et votre application (ceci a déjà été abordée dans la deuxième partie de l’article concernant l’installation de Symfony) est de décrire la structure des de vos données (les tables de votre base de données).
Ceci peut être fait de deux manière, l’XML ou bien le YAML qui est le langage de spécification de base de Symfony (ne vous inquiétez pas, ce n’est pas un autre langage à apprendre, c’est le plus simple de tous les langages de spécifications). La structure de vos données sera donc écrite dans le fichier schema.yml (ou schema.xml) qui se trouve dans le dossier config de votre projet Symfony.
Exemple de schema ( /votreProjet/config/schema.yml) :
propel:
patient:
id :
nom : varchar
prenom : varchar
date_naissance : date
notes : text
visite:
id :
motif : varchar
date_visite : date
Ensuite vous devrez créer une base de données que vous nommerez par exemple “maBDD”. Il reste ensuite à configurer Symfony pour qu’il sache accéder à cette base de donnée. Ceci se fait dans deux fichiers principaux. Tout d’abord le fichier “databases.yml” et le fichier “propel.ini” présents dans le dossier config de votre projet.
Exemple de fichier (/MonProjet/config/databases.yml) :
all:
propel:
class: sfPropelDatabase
param:
dsn: mysql://user:pass@localhost/maBDD
encoding: utf8
Exemple de fichier (/MonProjet/config/propel.ini) :
propel.targetPackage = lib.model
propel.packageObjectModel = true
propel.project = votreProjet
propel.database = mysql
propel.database.createUrl = mysql://user:pass@localhost/
propel.database.url = mysql://user:pass@localhost/maBDD
....
Voila maintenant, il ne vous reste plus qu’à taper quelques commandes, alors ouvrez votre terminal et accéder au dossier de votre projet symfony et ensuite tapez la commande suivante :
$ symfony propel:build-all
ou bien pour la version 1.0 de Symfony
$ symfony propel-build-all
Comprendre Propel et le model généré
La commande précédente effectue différentes taches répétitives pour chaque projet et vous fait donc gagner un temps énorme.
1- Elle crée un fichier SQL, qui contient le code de création de vos tables de base de donnée.
2- Elle exécute ce code SQL sur votre serveur de bases de données, c’est à dire qu’elle va créer vos tables dans votre base de données.
3- Le point le plus important, elle généré les différentes classes d’abstraction pour la manipulation de vos données sans à accéder directement à la base de donnée et sans utiliser de requêtes SQL. Il est à noter également que propel détecte instinctivement les relations entre vos différentes tables (comme la relation entre les visites et le patient dans notre exemple)
Pour chaque table, elle crée deux classes : La première (tablePeer) est celle permettant de manipulant les enregistrements, c’est à dire offrant un ensemble de primitives pour la sélection, la suppression … selon certains critères.
exemple :
<?php
$this->patients = PatientPeer::doSelect(new Criteria()); // Selection de tous les patients
?>
Et la deuxième représentant un enregistrement (un tuple), permettant d’accéder aux attributs, de les modifier, de sauvegarder l’enregistrement…
L’insertion d’un nouvel élément dans une table de base de données, reviendrai donc à créer un nouvelle objet, de remplir ses valeurs et de l’enregistrer
exemple :
<?php
$patient = new Patient();
$patient->setNom("Benguella");
$patient->setPrenom("Riad");
$patient->save();
?>
Voila mon but à travers cet article n’était pas de vous familiariser avec Propel (Et si vous avez un problème technique ou autre, n’hésitez pas à me contacter ou laissez un commentaire), mais surtout de vous montrer l’étendu de ses avantages et possibilités.
Source : Le blog, YouKnowRiad




www.hustoo.net