<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Riad Benguella, Le blog &#187; Propel</title>
	<atom:link href="http://blog.riadbenguella.com/tag/propel/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.riadbenguella.com</link>
	<description>Développement, Web, High-Tech et autres</description>
	<lastBuildDate>Sat, 14 Jan 2012 12:22:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Symfony 1.2, les nouveautés</title>
		<link>http://blog.riadbenguella.com/symfony-12-les-nouveautes/</link>
		<comments>http://blog.riadbenguella.com/symfony-12-les-nouveautes/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 10:28:06 +0000</pubDate>
		<dc:creator>Riad</dc:creator>
				<category><![CDATA[Développement web et programmation]]></category>
		<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[Jobeet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Propel]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://youknowriad.nomade-dz.com/?p=283</guid>
		<description><![CDATA[Et oui, cette semaine a vu le jour la version finale de Symfony 1.2, qui apporte son lot de nouveautés, plus utiles les unes que les autres. Ce n&#8217;est que pour faire le bonheur des développeurs Web. Après trois années &#8230; <a href="http://blog.riadbenguella.com/symfony-12-les-nouveautes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Et oui, cette semaine a vu le jour la version finale de <a href="http://www.symfony-project.org/installation/1_2">Symfony 1.2</a>, qui apporte son lot de nouveautés, plus utiles les unes que les autres. Ce n&#8217;est que pour faire le bonheur des développeurs Web. Après trois années que le framework est en Open Source, Symfony a su s&#8217;imposer comme étant l&#8217;un des meilleurs frameworks PHP, et cette nouvelle version est la pour consolider cette position.</p>
<p>Et comme une bonne nouvelle ne vient jamais seule, les développeurs ont pensé aussi aux débutants avec la mise en place d&#8217;un nouveau tutorial &laquo;&nbsp;<a href="http://www.symfony-project.org/jobeet/1_2/en/">Jobeet</a>&nbsp;&raquo; pour permettre de maitriser Symfony assez rapidement et se rendre compte de ces atouts.<span id="more-283"></span></p>
<p><strong>Les nouveautés de Symfony1.2</strong></p>
<ul>
<li><strong><em>ORM Doctrine et Propel :</em> </strong>Grâce à cette nouvelle version le plugin permettant d&#8217;utiliser l&#8217;ORM Doctrine est présent par défaut mais il ne remplace pas Propel, il faudra choisir votre configuration si vous voulez ce faire. <a href="http://youknowriad.nomade-dz.com/propel-couche-dabstraction-donnees-symfony/">Propel</a> quand à lui passe à la version 1.3, offrant ainsi de meilleures performances.</li>
</ul>
<ul>
<li><strong><em>Un nouveau générateur d&#8217;administration : </em></strong>comme vous le savez, Symfony vous évite la tâche fastidieuse de développer un gestionnaire d&#8217;administration pour vos applications web grâce à son générateur configurable à votre guise. Celui ci a complètement été réécrit grâce à la nouvelle gestion des formulaires introduites dans la version 1.1 mais tout en gardant une rétro compatibilité avec les versions précédentes.</li>
</ul>
<ul>
<li>Un nouveau système de routage (Architecture REST).</li>
</ul>
<ul>
<li>Amélioration de la gestion des formulaires MVC introduites dans la version 1.1</li>
</ul>
<ul>
<li><strong><em>Les helpers JAVASCRIPT, Scriptaculous et Prototype :</em> </strong>Les deux frameworks Javascript/AJAX (Scriptaculous et Prototype) sont maintenant intégrés grâce à des plugins séparés et de nouveaux helpers javascripts basiques ont été ajoutés.</li>
</ul>
<ul>
<li>Améliorations des tests fonctionnels.</li>
</ul>
<ul>
<li>Ainsi que d&#8217;autres améliorations plus ou moins importantes&#8230;</li>
</ul>
<p><strong>Jobeet</strong></p>
<p>Rappeler vous du premier tutorial <a href="http://www.symfony-project.org/askeet/1_0/fr/1">Askeet</a>, mis en place à l&#8217;occasion du lancement de la première version 1.0 de Symfony. Ce tutorial avait permis à un grand nombre d&#8217;adopter Symfony dans un temps record. Les développeurs cette fois ci frappe fort avec un nouveau tutorial &laquo;&nbsp;<a href="http://www.symfony-project.org/jobeet/1_2/en/">Jobeet</a>&nbsp;&raquo; qui va permettre de développer une VRAI application web fonctionnelle de A à Z en 24 heures à l&#8217;ordre d&#8217;une heure par jour.</p>
<p>Vous apprendrez donc l&#8217;utilisation du framework Symfony 1.2 et sentirez également l&#8217;apport énorme de ce framework en matière de développement d&#8217;applications web. Votre seul prérequis nécessaire est la connaissance des bases du PHP 5.</p>
<p>Ce tutorial servira également aux personnes ayant déja une certaine connaissance de Symfony puisqu&#8217;il leur permettra de se familiariser avec les nouveautés de cette nouvelle version.</p>
<p align="center"><a href="http://www.symfony-project.org/jobeet/1_2/en/"><img class="alignnone" title="Jobeet" src="http://www.symfony-project.org/images/jobeet/flyer_2_220_100.png" alt="" width="220" height="100" /></a></p>
<p>Moi aussi je v m&#8217;y mettre sans tarder<img onclick="grin(':bien:');" src="../wp-includes/images/smilies/good.png" alt=":bien:" />, la première heure du tutorial c&#8217;est <a href="http://www.symfony-project.org/jobeet/1_2/en/01">par ici</a> (en anglais seulement pour l&#8217;instant, mais la traduction ne devrait pas tarder).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riadbenguella.com/symfony-12-les-nouveautes/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Propel, la puissante couche d&#8217;abstraction de Symfony</title>
		<link>http://blog.riadbenguella.com/propel-couche-dabstraction-donnees-symfony/</link>
		<comments>http://blog.riadbenguella.com/propel-couche-dabstraction-donnees-symfony/#comments</comments>
		<pubDate>Fri, 03 Oct 2008 20:06:40 +0000</pubDate>
		<dc:creator>Riad</dc:creator>
				<category><![CDATA[Développement web et programmation]]></category>
		<category><![CDATA[mySQL]]></category>
		<category><![CDATA[Propel]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://youknowriad.nomade-dz.com/propel-la-puissante-couche-dabstraction-de-symfony/</guid>
		<description><![CDATA[Comme je l&#8217;avait mentionné dans l&#8217;article sur l&#8217;architecture MVC, Symfony s&#8217;appuie grandement sur la couche d&#8217;abstraction de données &#171;&#160;Propel&#160;&#187; (on peut modifier cette couche par &#171;&#160;Doctrine&#160;&#187; par exemple). C&#8217;est certainement l&#8217;une des parties les plus importantes du Framework Symfony. Propel &#8230; <a href="http://blog.riadbenguella.com/propel-couche-dabstraction-donnees-symfony/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Comme je l&#8217;avait mentionné dans l&#8217;article sur <a href="http://youknowriad.nomade-dz.com/mvc-model-view-controller-symfony/">l&#8217;architecture MVC</a>, Symfony s&#8217;appuie grandement sur la couche d&#8217;abstraction de données &laquo;&nbsp;Propel&nbsp;&raquo; (on peut modifier cette couche par &laquo;&nbsp;Doctrine&nbsp;&raquo; par exemple). C&#8217;est certainement l&#8217;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.</p>
<p><span id="more-195"></span></p>
<p><strong>Que est-ce qu&#8217;une couche d&#8217;abstraction de données ?</strong></p>
<p>D&#8217;un point de vue matériel, une couche d&#8217;abstraction est l&#8217;ensemble des pilotes permettant aux applications d&#8217;accéder facilement aux différents périphériques. De la même manière, une couche d&#8217;abstraction de données vous permet d&#8217;accéder à vos bases de données de façon très simple et complètement indépendante du SGBD.</p>
<p><strong>La puissance de propel :</strong></p>
<p>La meilleure manière d&#8217;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&#8217;accès à votre base et ceci en 5 minutes.</p>
<p>Alors pour faire tout ceci, la seule &laquo;&nbsp;véritable tache&nbsp;&raquo; après avoir créé votre projet Symfony et votre application (ceci a déjà été abordée dans la deuxième partie de l&#8217;article concernant <a href="http://youknowriad.nomade-dz.com/installer-symfony-mac-os-mamp/">l&#8217;installation de Symfony</a>) est de décrire la structure des de vos données (les tables de votre base de données).</p>
<p>Ceci peut être fait de deux manière, l&#8217;XML ou bien le YAML qui est le langage de spécification de base de Symfony (ne vous inquiétez pas, ce n&#8217;est pas un autre langage à apprendre, c&#8217;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.</p>
<p><strong><em>Exemple de schema ( /votreProjet/config/schema.yml) :</em></strong><br />
<code>propel:<br />
&nbsp;&nbsp;patient:<br />
&nbsp;&nbsp;&nbps;&nbps;id :<br />
&nbsp;&nbsp;&nbsp;&nbsp;nom : varchar<br />
&nbsp;&nbsp;&nbsp;&nbsp;prenom : varchar<br />
&nbsp;&nbsp;&nbsp;&nbsp;date_naissance : date<br />
&nbsp;&nbsp;&nbsp;&nbsp;notes : text<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;visite:<br />
&nbsp;&nbsp;&nbsp;&nbsp;id :<br />
&nbsp;&nbsp;&nbsp;&nbsp;motif : varchar<br />
&nbsp;&nbsp;&nbsp;&nbsp;date_visite : date<br />
</code><br />
Ensuite vous devrez créer une base de données que vous nommerez par exemple &laquo;&nbsp;maBDD&nbsp;&raquo;. Il reste ensuite à configurer Symfony pour qu&#8217;il sache accéder à cette base de donnée. Ceci se fait dans deux fichiers principaux. Tout d&#8217;abord le fichier &laquo;&nbsp;databases.yml&nbsp;&raquo; et le fichier &laquo;&nbsp;propel.ini&nbsp;&raquo; présents dans le dossier config de votre projet.</p>
<p><em><strong>Exemple de fichier (/MonProjet/config/databases.yml) :</strong></em><br />
<code>all:<br />
&nbsp;&nbsp;propel:<br />
&nbsp;&nbsp;&nbsp;&nbsp;class:          sfPropelDatabase<br />
&nbsp;&nbsp;&nbsp;&nbsp;param:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dsn:          mysql://user:pass@localhost/maBDD<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encoding: utf8</code></p>
<p><em><strong>Exemple de fichier (/MonProjet/config/propel.ini) :</strong></em><br />
<code>propel.targetPackage       = lib.model<br />
propel.packageObjectModel  = true<br />
propel.project             = votreProjet<br />
propel.database            = mysql<br />
propel.database.createUrl  = mysql://user:pass@localhost/<br />
propel.database.url        = mysql://user:pass@localhost/maBDD<br />
&nbps;&nbps;<br />
....</code></p>
<p>Voila maintenant, il ne vous reste plus qu&#8217;à taper quelques commandes, alors ouvrez votre terminal et accéder au dossier de votre projet symfony et ensuite tapez la commande suivante :</p>
<p><code>$ symfony propel:build-all<br />
</code></p>
<p>ou bien pour la version 1.0 de Symfony</p>
<p><code>$ symfony propel-build-all<br />
</code><br />
<strong>Comprendre Propel et le model généré</strong></p>
<p>La commande précédente effectue différentes taches répétitives pour chaque projet et vous fait donc gagner un temps énorme.</p>
<p>1- Elle crée un fichier SQL, qui contient le code de création de vos tables de base de donnée.</p>
<p>2- Elle exécute ce code SQL sur votre serveur de bases de données, c&#8217;est à dire qu&#8217;elle va créer vos tables dans votre base de données.</p>
<p>3- Le point le plus important, elle généré les différentes classes d&#8217;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)</p>
<p>Pour chaque table, elle crée deux classes : La première (tablePeer) est celle permettant de manipulant les enregistrements, c&#8217;est à dire offrant un ensemble de primitives pour la sélection, la suppression &#8230; selon certains critères.</p>
<p><strong>exemple :</strong></p>
<p><code>&lt;?php<br />
&nbsp;&nbsp;<br />
$this-&gt;patients = PatientPeer::doSelect(new Criteria()); // Selection de tous les patients<br />
&nbsp;&nbsp;<br />
?&gt;</code></p>
<p>Et la deuxième représentant un enregistrement (un tuple), permettant d&#8217;accéder aux attributs, de les modifier, de sauvegarder l&#8217;enregistrement&#8230;</p>
<p>L&#8217;insertion d&#8217;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&#8217;enregistrer</p>
<p><strong>exemple :</strong></p>
<p><code>&lt;?php<br />
&nbsp;&nbsp;<br />
$patient = new Patient();<br />
&nbsp;&nbsp;<br />
$patient-&gt;setNom("Benguella");<br />
$patient-&gt;setPrenom("Riad");<br />
&nbsp;&nbsp;<br />
$patient-&gt;save();<br />
&nbsp;&nbsp;<br />
?&gt;<br />
</code><br />
Voila mon but à travers cet article n&#8217;était pas de vous familiariser avec Propel (Et si vous avez un problème technique ou autre, n&#8217;hésitez pas à me contacter ou laissez un commentaire), mais surtout de vous montrer l&#8217;étendu de ses avantages et possibilités.</p>
<p><strong>Remarque :</strong> Dans la nouvelle version de propel, quelques modifications affectent la configuration de Propel dans le fichier propel.ini : il faut par exemple utiliser &laquo;&nbsp;propel.database.creole.url&nbsp;&raquo; au lieu de  &laquo;&nbsp;propel.database.createUrl&nbsp;&raquo;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riadbenguella.com/propel-couche-dabstraction-donnees-symfony/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

