<?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>Tellaw.org &#187; propel</title>
	<atom:link href="http://www.tellaw.org/tag/propel/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tellaw.org</link>
	<description>La technologie doit devenir simple...</description>
	<lastBuildDate>Fri, 02 Apr 2010 14:48:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Propel : un hibernate like pour PHP&#8230;</title>
		<link>http://www.tellaw.org/2008/04/13/propel-un-hibernate-like-pour-php/</link>
		<comments>http://www.tellaw.org/2008/04/13/propel-un-hibernate-like-pour-php/#comments</comments>
		<pubDate>Sun, 13 Apr 2008 08:37:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[propel]]></category>
		<category><![CDATA[tutoriel]]></category>

		<guid isPermaLink="false">http://blog.tellaw.org/?p=6</guid>
		<description><![CDATA[Tout programmeur java connait bien hibernate ou ses equivalents et ne saurait plus maintennant s&#8217;en passer. Finalement, la création des requettes SQL est tellement génératrice de bugs dans le cycle de vie d&#8217;un projet, que l&#8217;utilisation d&#8217;une solution de mapping objet relationnelle (ORM) comme solution de persistence de vos données, doit devenir naturelle. C&#8217;est un [...]]]></description>
			<content:encoded><![CDATA[<p>Tout programmeur java connait bien hibernate ou ses equivalents et ne saurait plus maintennant s&#8217;en passer. Finalement, la création des requettes SQL est tellement génératrice de bugs dans le cycle de vie d&#8217;un projet, que l&#8217;utilisation d&#8217;une solution de mapping objet relationnelle (ORM) comme solution de persistence de vos données, doit devenir naturelle. C&#8217;est un énorme gain en programmation, en phase de recette, et assure que les principalles attaques possible sont déja corrigées dans le framework. Un petit zoom d&#8217;initiation à propel php.</p>
<p><span id="more-6"></span></p>
<p><strong>Objéctif de ce tutorial :</strong><br />
N&#8217;avoir plus de code à ecrire pour la base de donnée autre que par exemple :</p>
<p>monChat = new Cat();<br />
monChat-&gt;setName( &laquo;&nbsp;grosMatout&nbsp;&raquo; );<br />
monChat-&gt;save();</p>
<p>Voilà&#8230; le tout sans evidemment passé une journée à configurer le bouzin <img class="smiley" src="http://tellaw.org/themes/default/smilies/smile.png" alt=":-)" /></p>
<h3>1) Installation de propel sous windows :</h3>
<p>- installez php5 et pear. Pour rappel, il suffit de prendre un executable de php5 sur http://www.php.net et de lancer sous dos la commande go-pear.bat .</p>
<p>Ensuite dans une commande MSDOS lancez :<br />
<em>Installation de phing (Phing est une sorte de ANT en php).</em><br />
1) -&gt; $&gt; pear channel-discover pear.phing.info<br />
2) -&gt; $&gt; pear config-set preferred_state beta<br />
3) -&gt; $&gt; pear install phing/phing</p>
<p><em>Installation de Créole (Créole est une couche d&#8217;abstraction entre base de donnée et application en php5).</em><br />
1) -&gt; $&gt; pear install http://creole.phpdb.org/pear/creole-current.tgz<br />
2) -&gt; $&gt; pear install http://creole.phpdb.org/pear/jargon-current.tgz</p>
<p><em>Installation de Propel (Nous avons besoin du générateur en ligne de commande afin de construire le schéma de base).</em><br />
1) -&gt; $&gt; pear config-set preferred_state beta<br />
2) -&gt; $&gt; pear channel-discover pear.phpdb.org<br />
3) -&gt; $&gt; pear install phpdb/propel_generator<br />
4) -&gt; $&gt; pear install phpdb/propel_runtime (option non obligatoire pour la génération du schéma).</p>
<p>Voilà, si vous tapez la commande phing, vous devriez avoir le message :<br />
&laquo;&nbsp;F:\dev\propel\generator\projects&gt;phing<br />
Buildfile: build.xml does not exist!&nbsp;&raquo;</p>
<p>Pour travailler avec propel, vous devez respecter son arboréscence de répertoires, ce qui est bien plus simple si vous recuperez le paquage depuis le site de propel : &laquo;&nbsp;http://propel.phpdb.org/trac/wiki/Users/Download&nbsp;&raquo;</p>
<h3>2) Création du model objet :</h3>
<p>Imaginons que nous avons deux objets : Un chien, ayant un nom, et des jouets ayant aussi des noms et un attribut pouet, qui dira si oui ou non, ce jouet est bruyant. Un chien peut avoir N jouet, mais chaque jouet n&#8217;appartient qu&#8217;a un chien, d&#8217;ou une relation chien/jouet 1/N.  le fichier schema.xml sera le suivant :</p>
<blockquote>
<pre>&lt;?xml version="1.0" encoding="ISO-8859-1" standalone="no"?&gt;
&lt;!DOCTYPE database SYSTEM "../dtd/database.dtd"&gt;

&lt;database name="sampleDB" defaultIdMethod="native"&gt;

	&lt;!--
		CHIEN Object description
	--&gt;
	&lt;table name="chien" defaultIdMethod="native"&gt;

		&lt;column
			name="id"
			required="true"
			primaryKey="true"
			autoIncrement="true"
			type="INTEGER"/&gt;

		&lt;column
		        name="nom"
			required="true"
			type="VARCHAR"
                        size="255"/&gt;

	&lt;/table&gt;

	&lt;!--
		JOUET Object description
	--&gt;
  	&lt;table name="jouet" defaultIdMethod="native"&gt;

		&lt;column
			name="id"
			required="true"
			primaryKey="true"
			autoIncrement="true"
			type="INTEGER"/&gt;

		&lt;column
			name="nom"
			type="INTEGER"
			defautl="0"/&gt;

		&lt;column
			name="chien_id_FK"
			required="false"
			type="INTEGER"
			default="0"/&gt;

		&lt;column
			name="pouet"
			required="yes"
			type="INTEGER"/&gt;

		&lt;foreign-key foreignTable="chien" onDelete="SETNULL"&gt;

		&lt;/foreign-key&gt;

  	&lt;/table&gt;

&lt;/database&gt;</pre>
</blockquote>
<p>Que dire de plus ???? simple&#8230;.</p>
<h3>2) Génération du schéma SQL et des objets PHP5 :</h3>
<p>Mon installation de propel est sur : &laquo;&nbsp;F:\dev\propel\&nbsp;&raquo;<br />
Je vais donc en MS dos aller sur : &laquo;&nbsp;F:\dev\propel\generator\projects&gt;&nbsp;&raquo;</p>
<p>Puis il suffit de taper la commande : &laquo;&nbsp;F:\dev\propel\generator\projects&gt;propel-gen shop&nbsp;&raquo; ou &laquo;&nbsp;shop&nbsp;&raquo; est le nom du projet.</p>
<h3>2) Utilisation dans un exemple :</h3>
<blockquote>
<pre>&lt;?

// Framework includes
include_once("propel/Propel.php");
// Ce fichier est généré par léxecution de la commande de génération du SQL.
Propel::init("shop-conf.php");

include_once 'shop/Chien.php';
include_once 'shop/Jouet.php';

// Creation et sauvegarde:

$chien = new Chien();
$chien -&gt; setNom ("toto");

$jouet = new Jouet();
$jouet -&gt; setNom ("canard");
$jouet -&gt; setPouet (1);

$jouet -&gt; setChien ( $chien );

$chien -&gt; save();
$jouet -&gt; save();

?&gt;</pre>
</blockquote>
<p>Remarque : le mapping ci-dessus n&#8217;est qu&#8217;un exemple, il serait plus judicieux de le revoir pour eviter la double commande :<br />
$chien -&gt; save();<br />
$jouet -&gt; save();</p>
<p>Voilà&#8230;</p>
<ul>
<li><a href="http://propel.phpdb.org/trac/" target="_blank">http://propel.phpdb.org/trac/</a></li>
<li><a href="http://phing.info/trac/" target="_blank">http://phing.info/trac/</a></li>
<li><a href="http://creole.phpdb.org/trac/" target="_blank">http://creole.phpdb.org/trac/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.tellaw.org/2008/04/13/propel-un-hibernate-like-pour-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
