﻿<?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>Alexandre JULIEN &#187; PHP</title>
	<atom:link href="http://www.alexandre-julien.com/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alexandre-julien.com</link>
	<description>Industrialisation des développements, PHP, .NET, jQuery, HTML5, Web, …</description>
	<lastBuildDate>Sun, 22 Jan 2012 20:26:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Console Symfony 2 : coloration syntaxique sous Windows</title>
		<link>http://www.alexandre-julien.com/php/symfony2/console-symfony-2-coloration-syntaxique-sous-windows/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=console-symfony-2-coloration-syntaxique-sous-windows</link>
		<comments>http://www.alexandre-julien.com/php/symfony2/console-symfony-2-coloration-syntaxique-sous-windows/#comments</comments>
		<pubDate>Sat, 24 Sep 2011 16:33:12 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Symfony2]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[screencast]]></category>
		<category><![CDATA[symfony2]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1728</guid>
		<description><![CDATA[
Voici une petite astuce pour ceux qui développent avec Symfony / Symfony 2 sous Windows et qui veulent avoir une console de génération de code plus agréable.
Sous distribution Linux, vous avez surement remarqué que la sandbox / console de Symfony s&#8217;affiche avec une légère mise en page et  [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2011/09/Symfony2-coloration-syntaxique-windows-console.jpg"><img class="aligncenter size-full wp-image-1731" title="Symfony2-coloration-syntaxique-windows-console" src="http://www.alexandre-julien.com/wp-content/uploads/2011/09/Symfony2-coloration-syntaxique-windows-console.jpg" alt="" width="663" height="207" /></a></p>
<p>Voici une petite astuce pour ceux qui développent avec Symfony / Symfony 2 sous Windows et qui veulent avoir une console de génération de code plus agréable.</p>
<p>Sous distribution Linux, vous avez surement remarqué que la sandbox / console de Symfony s&#8217;affiche avec une légère mise en page et coloration syntaxique grâce à la gestion particulière des séquences ANSI de POSIX (environnements UNIX).</p>
<p>Vous serez très content de savoir que l&#8217;on peut bénéficier de cet avantage sur les plateformes Windows x86 et x64 grâce à la librairie <a title="ANSICON" href="http://adoxa.110mb.com/ansicon/" target="_blank">ANSICON</a> qui permet la reconnaissance des <a title="ANSI Espace Code" href="http://en.wikipedia.org/wiki/ANSI_escape_code" target="_blank">formatages spéciaux ANSI</a>.</p>
<p>L&#8217;utilisation en est très simple, il suffit de télécharger la librairie <a title="ANSICON" href="http://adoxa.110mb.com/ansicon/" target="_blank">ANSICON</a> à l&#8217;adresse suivante : <a href="http://adoxa.110mb.com/ansicon/">http://adoxa.110mb.com/ansicon/</a> .</p>
<p style="text-align: left;">Ensuite, il faudra décompresser l&#8217;ensemble dans un dossier e lancer &laquo;&nbsp;ansicon.exe&nbsp;&raquo; dans le répertoire x86 ou x64 en fonction de votre environnement Windows. Cela vous ouvrira un invite de commande Windows avec la gestion de la coloration syntaxique.</p>
<p><iframe src="http://www.youtube.com/embed/rCEIX2hqK2k" frameborder="0" width="640" height="360"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/symfony2/console-symfony-2-coloration-syntaxique-sous-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un IDE pour Symfony 2</title>
		<link>http://www.alexandre-julien.com/php/symfony2/ide-pour-symfony-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ide-pour-symfony-2</link>
		<comments>http://www.alexandre-julien.com/php/symfony2/ide-pour-symfony-2/#comments</comments>
		<pubDate>Sun, 11 Sep 2011 15:49:52 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Symfony2]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1709</guid>
		<description><![CDATA[En phase d&#8217;apprentissage du Framework Symfony 2, je cherchais un environnement de développement assez complet pour travailler sur le dernier né de Sensio Labs.
D&#8217;une manière générale, en développement PHP j&#8217;ai beaucoup utilisé Eclipse (en priorité), Netbeans (pour Symfony 1.x) et Zend Studio  [...]]]></description>
			<content:encoded><![CDATA[<p>En phase d&#8217;apprentissage du Framework Symfony 2, je cherchais un environnement de développement assez complet pour travailler sur le dernier né de Sensio Labs.</p>
<p>D&#8217;une manière générale, en développement PHP j&#8217;ai beaucoup utilisé Eclipse (en priorité), Netbeans (pour Symfony 1.x) et Zend Studio (autrement dit Eclipse avec une licence à 300 €)</p>
<p>Depuis quelques temps, je suis en totale admiration devant PhpStorm de l&#8217;éditeur JetBrains, qui dans la lignée de IntelliJ et Webstorm offre une IDE complet sur PHP : très léger, auto-completion Smarty et Twig, gestion de Zend et Symfony, build avec phing, &#8230; Bref le top du top et à un coût raisonnable et justifié.</p>
<p>En revanche pour Symfony 2, un plugin très intéressant et complet se prépare sur Eclipse :<a title="Symfony 2 Eclipse Plugin" href="http://www.alexandre-julien.com/go/symfony2-eclipse-plugin/" target="_blank"> http://pulse00.github.com/Symfony-2-Eclipse-Plugin/</a></p>
<p>A priori, le plugin s&#8217;avère extrêmement intéressant, pour l&#8217;instant il reste en version de développement, notamment à cause de la version 3.0 du PDT qui n&#8217;est toujours pas finalisée (au passage vous avez constaté l&#8217;humiliation qui a été dévoué au PDT sur la page de téléchargement d&#8217;Eclipse).</p>
<p>Je mets à disposition une version sympa pour développer sur SF2 qui contient :</p>
<p>- Eclipse 3.7</p>
<p>- Eclipse MarketPlace</p>
<p>- PDT 3.0</p>
<p>- Support du YAML</p>
<p>- Plugin Symfony 2</p>
<p>- Support de Twig</p>
<p>- Support SVN et GIT</p>
<p>- Support GITHUB</p>
<p>Vous pouvez télécharger la version Windows ici : <a title="Eclipse for Symfony 2" href="http://www.alexandre-julien.com/go/download-eclipse-symfony2/" target="_blank">http://download.alexandre-julien.com/EclipseSF2.zip (286 Mo)</a></p>
<p>Vous pouvez également suivre le tutoriel de la Ferme Du Web pour configurer votre Eclipse avec le plugin Symfony2 : <a title="La ferme du web" href="http://www.lafermeduweb.net/tutorial/installer-et-configurer-symfony-eclipse-plugin-pour-symfony2-p93.html" target="_blank">http://www.lafermeduweb.net/tutorial/installer-et-configurer-symfony-eclipse-plugin-pour-symfony2-p93.html</a></p>
<p>Vivement aussi que PHPStorm supporte Symfony2 prochainement <img src='http://www.alexandre-julien.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/symfony2/ide-pour-symfony-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Zend Framework 2.0 : première version de développement</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-2-0-premiere-version-de-developpement/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-2-0-premiere-version-de-developpement</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-2-0-premiere-version-de-developpement/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 20:19:28 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[zend framework 2]]></category>
		<category><![CDATA[zf]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1526</guid>
		<description><![CDATA[
Zend vient de diffuser une première version de développement de Zend Framework 2.0 afin de faire découvrir les quelques nouveautés de la bibliothèque PHP5.
Au programme, tout comme Symfony 2, Zend Framework 2.0 sera entièrement conçu pour PHP 5.3 avec les &#171;&#160;namespaces&#160;&#187;.

Toutefois rien de bien  [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/08/logo-zend-framework.jpg"><img class="aligncenter size-full wp-image-1528" title="logo-zend-framework" src="http://www.alexandre-julien.com/wp-content/uploads/2010/08/logo-zend-framework.jpg" alt="" width="282" height="190" /></a></p>
<p>Zend vient de diffuser une première version de développement de Zend Framework 2.0 afin de faire découvrir les quelques nouveautés de la bibliothèque PHP5.</p>
<p>Au programme, tout comme Symfony 2, Zend Framework 2.0 sera entièrement conçu pour PHP 5.3 avec les &laquo;&nbsp;namespaces&nbsp;&raquo;.</p>
<p><span id="more-1526"></span></p>
<div id="attachment_1529" class="wp-caption aligncenter" style="width: 680px"><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/08/zf-2.0.png"><img class="size-full wp-image-1529" title="Zend Framework 2.0 : Zend Tool" src="http://www.alexandre-julien.com/wp-content/uploads/2010/08/zf-2.0.png" alt="" width="670" height="727" /></a><p class="wp-caption-text">Pas de nouvelle pour Zend Tool à l&#39;heure actuelle</p></div>
<p>Toutefois rien de bien nouveau sur cette version de développement. Elle correspondant principalement aux librairies de ZF 1.10.</p>
<p>Les seuls nouveautés concernent apparemment les tests unitaires qui seraient plus simplifiés, une ré-écriture totale de Zend_Session ainsi que l&#8217;ajout d&#8217;une nouvelle librairie Zend_stdlib permettant d&#8217;appeller les librairies standard de PHP d&#8217;une façon plus orienté objet et plus harmonisée.</p>
<div id="attachment_1530" class="wp-caption aligncenter" style="width: 1034px"><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/08/zf-2.0-config.png"><img class="size-large wp-image-1530" title="Zend Framework 2.0 : Zend Application" src="http://www.alexandre-julien.com/wp-content/uploads/2010/08/zf-2.0-config-1024x733.png" alt="" width="1024" height="733" /></a><p class="wp-caption-text">Structure identique à Zend Framework 1.10</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-2-0-premiere-version-de-developpement/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Phoogle Map : fin du support</title>
		<link>http://www.alexandre-julien.com/php/phoogle-map/phoogle-map-fin-du-support/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=phoogle-map-fin-du-support</link>
		<comments>http://www.alexandre-julien.com/php/phoogle-map/phoogle-map-fin-du-support/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 19:58:38 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Phoogle Map]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[maps]]></category>
		<category><![CDATA[Phoogle]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1514</guid>
		<description><![CDATA[
Bonjour à tous,
Je vous informe que j&#8217;ai désormais arrêter le projet Phoogle Map. Les raisons sont multiples, et je me dois de vous en faire part :
- Changement majeur de l&#8217;API de Google Map V3 m&#8217;obligerait à faire une ré-écriture complète de la librairie
- Je manque considérablement de temps  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/08/fbc_wide.png"><img class="aligncenter size-full wp-image-1519" title="PhoogleMap" src="http://www.alexandre-julien.com/wp-content/uploads/2010/08/fbc_wide.png" alt="" width="635" height="400" /></a></p>
<p>Bonjour à tous,</p>
<p>Je vous informe que j&#8217;ai désormais arrêter le projet Phoogle Map. Les raisons sont multiples, et je me dois de vous en faire part :</p>
<p>- Changement majeur de l&#8217;API de Google Map V3 m&#8217;obligerait à faire une ré-écriture complète de la librairie</p>
<p>- Je manque considérablement de temps libre pour continuer à faire avancer ce projet, entre mes devoirs d&#8217;étudiants, mes stages en alternances et à temps plein, j&#8217;ai peu de temps libre pour moi.</p>
<p>- Je recommande fortement l&#8217;utilisation d&#8217;un plugin Symfony dont les classes peuvent être utiliser indépendamment du framework. Le projet s&#8217;appelle sfEasyGMapPlugin est il est disponible à cette adresse : <a title="SfGmapPlugin" href="http://www.symfony-project.org/plugins/sfEasyGMapPlugin" target="_blank">http://www.symfony-project.org/plugins/sfEasyGMapPlugin</a>. Ce projet est très sérieux et il est utilisé très professionnellement par de nombreux sites Web.</p>
<p>- PhoogleMap a très peu de succès, seulement 190 téléchargements en 9 mois pour la dernière version.</p>
<p>- PhoogleMap a été conçu pour une utilisation orienté productivité et pour une utilisation nécessitant aucune connaissance sur l&#8217;API de GoogleMap principalement a destination des freelances et SSII pour leurs projets. Or la demande actuellement est plutôt orienté grande intégration et qualité, les entreprises développent de plus en plus leurs propres librairies pour répondre à leur besoin.</p>
<p>Je remercie ceux qui auront utilisé ce projet et qui auront prêté de l&#8217;intérêt. Le projet reste disponible en licence GNU / GPL néanmois il est basé sur la version 2 de Google Map API est désormais obsolète pour être remplacer par la version v3.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/phoogle-map/phoogle-map-fin-du-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework #6 : Utilisation de Zend_Navigation</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-6-utilisation-de-zend_navigation/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-6-utilisation-de-zend_navigation</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-6-utilisation-de-zend_navigation/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 15:54:54 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[zend_navigation]]></category>
		<category><![CDATA[zf]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1197</guid>
		<description><![CDATA[
Il est très utile dans une application Web d&#8217;avoir un système de navigation capable de cartographier les pages d&#8217;un site et d&#8217;en déduire des plan de site, fils d&#8217;arianes, menus, sitemap.xml, &#8230;
Zend_Navigation a été conçu dans cette optique, il propose un système de gestion de pages et des helpers  [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/banner_zf_logo_v1_9.jpg"><img class="aligncenter" title="Zend Framework 1.9.2" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/banner_zf_logo_v1_9.jpg" alt="" width="429" height="255" /></a></p>
<p>Il est très utile dans une application Web d&#8217;avoir un système de navigation capable de cartographier les pages d&#8217;un site et d&#8217;en déduire des plan de site, fils d&#8217;arianes, menus, sitemap.xml, &#8230;</p>
<p>Zend_Navigation a été conçu dans cette optique, il propose un système de gestion de pages et des helpers pour générer des composants graphiques.</p>
<p><span id="more-1197"></span></p>
<p>Nous allons voir dans ce tutoriel une façon simple de mettre en place Zend_Navigation :</p>
<p>Tout d&#8217;abord il nous faut définir la navigation et le conteneur de donnée. Dans notre cas, on stockera l&#8217;arborescence dans un fichier XML appellé &#8216;navigation.xml&#8217; dans le répertoire &laquo;&nbsp;config&nbsp;&raquo;.</p>
<pre class="brush: php; title: ; notranslate">
protected function _initNavigation() {
$this-&gt;bootstrap('layout');
$layout = $this-&gt;getResource('layout');
$view = $layout-&gt;getView();
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
$container = new Zend_Navigation($config);
$view-&gt;navigation($container);
}
&lt;div&gt;
</pre>
<p>Ensuite, on remplit le fichier &laquo;&nbsp;navigation.xml&nbsp;&raquo; pour créer notre navigation, on y indiquera la page d&#8217;accueil et une page de listing.<br />
On se basera sur le système de routes pour donner le lien.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;configdata&gt;
 &lt;nav&gt;
 &lt;home&gt;
 &lt;label&gt;Accueil&lt;/label&gt;
 &lt;route&gt;index&lt;/route&gt;
 &lt;pages&gt;
 &lt;listing&gt;
 &lt;label&gt;Liste CRUD&lt;/label&gt;
 &lt;route&gt;listing&lt;/route&gt;
 &lt;/listing&gt;
&lt;/pages&gt;
&lt;/home&gt;
&lt;/nav&gt;
&lt;/configdata&gt;
</pre>
<p>Et voilà la mise en place de Zend_Navigation est fini. Il ne vous reste plus qu&#8217;à utiliser des helpers pour appeler vos composants :<br />
Pour le breadcrumb par exemple :</p>
<pre class="brush: php; title: ; notranslate">
$this-&gt;navigation()-&gt;breadcrumbs()-&gt;setSeparator(&quot; -&gt; &quot;);
</pre>
<p>Il existe d&#8217;autres façon d&#8217;intégrer Zend_Navigation sur une application notamment en intervenant directement sur le code. Cette méthode reste très simple mais très fonctionnelle. On y pourra voir des améliorations comme mettre en place un cache pour augmenter les performances.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-6-utilisation-de-zend_navigation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Documentation PHP accessible depuis Google Chrome grâce à une petite extension</title>
		<link>http://www.alexandre-julien.com/navigateurs/documentation-php-accessible-depuis-google-chrome-grace-a-une-petite-extension/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=documentation-php-accessible-depuis-google-chrome-grace-a-une-petite-extension</link>
		<comments>http://www.alexandre-julien.com/navigateurs/documentation-php-accessible-depuis-google-chrome-grace-a-une-petite-extension/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 20:50:10 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Navigateurs]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[google chrome]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1187</guid>
		<description><![CDATA[Voici une petite extension sympa sur le navigateur Google Chrome : il s&#8217;agit d&#8217;un petit moteur de recherche sur le site PHP.net permettant d&#8217;accéder directement à la documentation officielle de PHP à partir du navigateur. Tout bête, mais très pratique !
L&#8217;extension est téléchargeable à cette  [...]]]></description>
			<content:encoded><![CDATA[<p>Voici une petite extension sympa sur le navigateur Google Chrome : il s&#8217;agit d&#8217;un petit moteur de recherche sur le site PHP.net permettant d&#8217;accéder directement à la documentation officielle de PHP à partir du navigateur. Tout bête, mais très pratique !</p>
<p>L&#8217;extension est téléchargeable à cette adresse : <a href="https://chrome.google.com/extensions/detail/kfiahljocaflpaiopilgpiochncgdnhd">https://chrome.google.com/extensions/detail/kfiahljocaflpaiopilgpiochncgdnhd</a></p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/03/Chrome-PHP-Documentation.png"><img class="aligncenter size-medium wp-image-1190" title="Chrome PHP Documentation" src="http://www.alexandre-julien.com/wp-content/uploads/2010/03/Chrome-PHP-Documentation-331x200.png" alt="" width="331" height="200" /></a><span id="more-1187"></span>Les résultats de recherche sont identiques à ceux du moteur de recherche de PHP.NET</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/03/Chrome-PHP-Documentation-Result.png"><img class="aligncenter size-medium wp-image-1191" title="Chrome PHP Documentation Result" src="http://www.alexandre-julien.com/wp-content/uploads/2010/03/Chrome-PHP-Documentation-Result-340x200.png" alt="" width="340" height="200" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/navigateurs/documentation-php-accessible-depuis-google-chrome-grace-a-une-petite-extension/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HipHop : quand Facebook revoit la runtime de PHP avec un compilateur C++ &#8230;</title>
		<link>http://www.alexandre-julien.com/php/hiphop-quand-facebook-revoit-la-runtime-de-php-avec-un-compilateur-c/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hiphop-quand-facebook-revoit-la-runtime-de-php-avec-un-compilateur-c</link>
		<comments>http://www.alexandre-julien.com/php/hiphop-quand-facebook-revoit-la-runtime-de-php-avec-un-compilateur-c/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 10:21:31 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Facebook]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Réseaux sociaux]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[compilateur]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[g++]]></category>
		<category><![CDATA[hiphop]]></category>
		<category><![CDATA[runtime]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1161</guid>
		<description><![CDATA[
Une rumeur circule depuis quelques temps, à propos d&#8217;une ré-inventation de PHP par Facebook pour optimiser les performances de leurs applications. Cette dernière a été désormais par la firme, un ingénieur a travaillé sur une refonte de la runtime de PHP afin d&#8217;avoir un résultat compilé et non plus  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/02/facebook.jpg"><img class="aligncenter size-full wp-image-1169" title="facebook" src="http://www.alexandre-julien.com/wp-content/uploads/2010/02/facebook.jpg" alt="" width="640" height="212" /></a></p>
<p>Une rumeur circule depuis quelques temps, à propos d&#8217;une ré-inventation de PHP par Facebook pour optimiser les performances de leurs applications. Cette dernière a été désormais par la firme, un ingénieur a travaillé sur une refonte de la runtime de PHP afin d&#8217;avoir un résultat compilé et non plus interprété comme c&#8217;est le cas actuellement avec la runtime de Zend.</p>
<p>Le projet s&#8217;appelle HipHop et il s&#8217;appuie non pas sur un compilateur mais plutôt sur un transcodeur qui permet de passer d&#8217;un code PHP à un code C++ très optimisé et ce dernier pouvant être compilé avec g++.</p>
<p>Ce travail a mis plus de 2 ans avant de voir le jour et ce travail verra le jour très bientôt dans un projet Open Source sous licence Creative-Commons.</p>
<p><span id="more-1161"></span></p>
<p>Voici le processus de HipPop pour optimiser une application PHP :</p>
<p style="text-align: center;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2010/02/HipHop_transformation_process.png"><img class="aligncenter size-full wp-image-1165" title="HipHop_transformation_process" src="http://www.alexandre-julien.com/wp-content/uploads/2010/02/HipHop_transformation_process.png" alt="" width="645" height="403" /></a></p>
<p>Il s&#8217;agit d&#8217;une transformation de code qui part de sources PHP, le code est parsé et ensuite optimisé avant d&#8217;être traduit en C++. Le code C++ est lui aussi optimiser et ensuite il est compilé via G++ en langage machine.</p>
<p>Certaines fonctions trop gourmande comme &laquo;&nbsp;eval()&nbsp;&raquo; ne seront pas supportées mais la globalité du langage est supportée.</p>
<p>Les essais de Facebook révèleraient un gain de performance de l&#8217;ordre de 80 % coté processeur et l&#8217;application Facebook elle-même devrait migrer sur cette technologie d&#8217;ici quelques semaines ou quelques mois. Ils devraient réduire de 50 % l&#8217;utilisation du CPU pour héberger Facebook ce qui constitue une économie intéressante puisqu&#8217;au dernières nouvelles Facebook, utiliserait plus 30 000 machines pour héberger son réseau social.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/hiphop-quand-facebook-revoit-la-runtime-de-php-avec-un-compilateur-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework #5 : Routing et UrlRewriting avec Zend_Controller</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-5-routing-et-urlrewriting-avec-zend_controller/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-5-routing-et-urlrewriting-avec-zend_controller</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-5-routing-et-urlrewriting-avec-zend_controller/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 18:57:51 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Bootstrap]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Router]]></category>
		<category><![CDATA[UrlRewriting]]></category>
		<category><![CDATA[zend_controller]]></category>
		<category><![CDATA[zf]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=1147</guid>
		<description><![CDATA[Un point essentiel à ne pas négliger sur une application Web est la ré-écriture d&#8217;URL via un système de routeur. Pourquoi ré-écrire des Urls alors que l&#8217;utilisateur n&#8217;en tape jamais directement ? Et bien tout simplement, parce que l&#8217;utilisateur ne comprend pas forcement où il se trouve sur le site  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/banner_zf_logo_v1_9.jpg"><img class="aligncenter size-full wp-image-685" title="Zend Framework 1.9.2" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/banner_zf_logo_v1_9.jpg" alt="" /></a>Un point essentiel à ne pas négliger sur une application Web est la ré-écriture d&#8217;URL via un système de routeur. Pourquoi ré-écrire des Urls alors que l&#8217;utilisateur n&#8217;en tape jamais directement ? Et bien tout simplement, parce que l&#8217;utilisateur ne comprend pas forcement où il se trouve sur le site en regardant une Url de type &laquo;&nbsp;index.php?category=43&amp;id=32&amp;session=ad4zcf43lpo&amp;page=322214421&#8243;. Une url comme &laquo;&nbsp;maboutique.com/composants/processeurs/intel/liste-des-processeurs.html&nbsp;&raquo; est beaucoup plus parlante.</p>
<p>La preuve c&#8217;est qu&#8217; il s&#8217;agit du 3ème point qui influe le plus le référencement d&#8217;une page. Et puis on peut également avoir besoin internationaliser ses urls.</p>
<p>Zend Framework possède un routeur, qui permet de manipuler plus facilement les liens entre les pages au sein d&#8217;une application et également de faire de la réécriture.</p>
<p>Cette étape se fait au sein du Bootstrap d&#8217;une application Zend Framework et grâce à Zend_Controller.</p>
<p><span id="more-1147"></span></p>
<p>Il faut tout d&#8217;abord surcharger la méthode _initAutoLoad() du Bootstrap et récupérer l&#8217;instance de Zend_Controller</p>
<pre class="brush: php; title: ; notranslate">

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

// Surcharge de _initAutoLoad
protected function _initAutoload()

{
$moduleLoader = new Zend_Application_Module_Autoloader(array('namespace'=&gt;'', 'basePath'=&gt;APPLICATION_PATH));

$frontController = Zend_Controller_Front::getInstance();
$router = $frontController-&gt;getRouter();

return $moduleLoader;
}

}
</pre>
<p>Ensuite il suffit simplement de créer ses routes et de les rajouter au routeur du contrôleur.<br />
Pour cela on a plusieurs possibilités, on peut créer des routes statiques, des routes basées sur les modules, etc &#8230;<br />
Le plus efficace est de créer des routes à partir d&#8217;URL pré-formatées grâce à des expressions régulières.<br />
On devra donc créer des instances de la classe Zend_Controller_Router_Route_Regex.</p>
<p>On la construira avec les arguments suivants :</p>
<p>1) La route : sous forme d&#8217;expression régulière (exemple : &#8216;produits/(.+)/(.+)/article-(.+)-(.+).html&#8217;)<br />
2) Le lien MVC : il faut donner les éléments statiques pour accéder à la page, c&#8217;est à dire le module, le contrôleur et l&#8217;action cible (exemple : array(&#8216;module&#8217; =&gt; &#8216;default&#8217;, &#8216;controller&#8217; =&gt; &#8216;products&#8217;, &#8216;action&#8217; =&gt; &#8216;showProduct&#8217;))<br />
3)Le mapping des paramètre : on donne dans l&#8217;ordre le nom des paramètres que l&#8217;on passera dans l&#8217;Url (exemple : array(1 =&gt; &#8216;category&#8217;, 2=&gt; &#8216;subcategory&#8217;, 3 =&gt; &#8216;product_title&#8217;, 4 =&gt; &#8216;product_ref&#8217;))<br />
4) Le chemin inverse : une version de l&#8217;url interprétable par la fonction sprintf() de PHP (exemple : &#8216;produits/%s/%s/article-%s-%d.html&#8217;)</p>
<pre class="brush: php; title: ; notranslate">

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

// Surcharge de _initAutoLoad
protected function _initAutoload()

{
$moduleLoader = new Zend_Application_Module_Autoloader(array('namespace'=&gt;'', 'basePath'=&gt;APPLICATION_PATH));

$frontController = Zend_Controller_Front::getInstance();
$router = $frontController-&gt;getRouter();

// Nouvelle route pour accéder à produit
$article = new Zend_Controller_Router_Route_Regex(
 'produits/(.+)/(.+)/article-(.+)-(.+).html',
 array('module' =&gt; 'default', 'controller' =&gt; 'products', 'action' =&gt; 'showProduct'),
 array(1 =&gt; 'category', 2=&gt; 'subcategory', 3 =&gt; 'product_title', 4 =&gt; 'product_ref'),
 'produits/%s/%s/article-%s-%d.html');
$router-&gt;addRoute($article);

return $moduleLoader;
}

}
</pre>
<p>Ainsi on pourra créer et appeler une url de type : &laquo;&nbsp;www.maboutique.com/produits/processeurs/dual-core/article-intelcore2duo-PI5421.html&nbsp;&raquo;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-5-routing-et-urlrewriting-avec-zend_controller/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Netbeans 6.8 : IDE pour développement PHP Symfony</title>
		<link>http://www.alexandre-julien.com/php/symfony/netbeans-6-8-ide-pour-developpement-php-symfony/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=netbeans-6-8-ide-pour-developpement-php-symfony</link>
		<comments>http://www.alexandre-julien.com/php/symfony/netbeans-6-8-ide-pour-developpement-php-symfony/#comments</comments>
		<pubDate>Sat, 26 Dec 2009 09:40:03 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[IDE]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[développement]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=962</guid>
		<description><![CDATA[
A l&#8217;heure où les environnements de développement pour PHP sont majoritairement basé sur Eclipse : PHP Development Tools, Aptana et Zend Studio, Netbeans quant à lui se faisait très discret dans le domaine des IDE PHP.
Voici la nouvelle version de NetBeans en release 6.8 avec des outils de  [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-963" title="Netbeans68_logo" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/Netbeans68_logo.png" alt="" /></p>
<p>A l&#8217;heure où les environnements de développement pour PHP sont majoritairement basé sur Eclipse : PHP Development Tools, Aptana et Zend Studio, Netbeans quant à lui se faisait très discret dans le domaine des IDE PHP.</p>
<p>Voici la nouvelle version de NetBeans en release 6.8 avec des outils de développement pour PHP 5 fort intéressants :</p>
<p><strong>Tout d&#8217;abord il existe une version de l&#8217;IDE entièrement dédié au développement PHP comme c&#8217;est le cas de la version All-In-One d&#8217;Eclipse.</strong></p>
<p><strong>- Il supporte également la version 5.3 de PHP</strong></p>
<p><strong>- Débugage de PHP dans l&#8217;IDE</strong></p>
<p><strong>- Exécution et pilotage de test-unitaires mis en place avec PHPUnit</strong></p>
<p><strong>- Support du Framework Symfony (autocompletion, exécution d&#8217;actions en ligne de commande depuis une console dans l&#8217;ide, support du YAML, &#8230;)</strong></p>
<p>Nous allons nous intéresser au support de Symfony dans l&#8217;IDE et voir si son usage facile le développement avec le framework PHP français !</p>
<p><span id="more-962"></span></p>
<p style="text-align: center;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/Netbeans_1_capture1.png"><img class="aligncenter size-large wp-image-983" title="Netbeans_1_capture" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/Netbeans_1_capture1-1024x612.png" alt="" width="614" height="367" /></a></p>
<p style="text-align: left;">L&#8217;interface de NetBeans 6.8 est relativement simple, ergonome et traduite dans toutes les langues pour les non-anglophones.</p>
<p style="text-align: left;">
<h2 style="text-align: left;"><span style="text-decoration: underline;">1. Paramétrage de NetBeans pour PHP</span></h2>
<p>Le paramétrage de NetBeans se fait en 3 étapes :</p>
<p>- Le chemin de l&#8217;exécutable &laquo;&nbsp;php.exe&nbsp;&raquo;<br />
- Le chemin du script de PHPUnit (facultatif)<br />
- Le chemin de la sandbox de symfony (symfony.bat ou symfony.sh)</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/config_php.png"><img class="aligncenter size-full wp-image-978" title="config_php" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/config_php.png" alt="" width="757" height="648" /></a></p>
<p>Vous devez spécifier le chemin de votre serveur PHP, c&#8217;est à dire<strong> l&#8217;emplacement du &laquo;&nbsp;php.exe&nbsp;&raquo;</strong> de votre installation pour utiliser les fonctions de débugage, compilation et exécution de code PHP en &laquo;&nbsp;Command Line Interface&nbsp;&raquo;. Dans mon exemple, je donne le chemin d&#8217;accès de mon installation WAMP.</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/config_symfony_sandbox.png"><img class="aligncenter size-full wp-image-980" title="config_symfony_sandbox" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/config_symfony_sandbox.png" alt="" width="759" height="643" /></a></p>
<p>En suite, il vous faudra spécifier le chemin d&#8217;accès à la sandbox de Symfony, sous Windows il s&#8217;agit du fichier <strong>&laquo;&nbsp;symfony.bat&nbsp;&raquo;</strong>.</p>
<h2><span style="text-decoration: underline;">2. Création de votre projet Symfony</span></h2>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/project_step0.png"><img class="aligncenter size-full wp-image-987" title="project_step0" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/project_step0.png" alt="" width="728" height="501" /></a></p>
<p>Pour créer votre projet Symfony, rien de plus simple, il suffit d&#8217;aller sur <strong>&laquo;&nbsp;Fichier -&gt; Nouveau Projet&nbsp;&raquo;</strong> et de créer un nouveau projet <strong>&laquo;&nbsp;Application PHP&nbsp;&raquo;</strong>.</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/project_step1.png"><img class="aligncenter size-full wp-image-988" title="project_step1" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/project_step1.png" alt="" width="723" height="499" /></a></p>
<p>Donnez ensuite, un nom à votre projet, sélectionnez la version de PHP utilisée, dans notre cas, on pourra se contenter de la version 5.2.x.<br />
<span style="color: #ff0000;">N&#8217;oublier pas de donner le répertoire contenant le code source  du framework Symfony cela fonctionne avec n&#8217;importe quelle version du framework à priori sauf peut être pour la version en développement 2.0.</span></p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/project_step2.png"><img class="aligncenter size-full wp-image-989" title="project_step2" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/project_step2.png" alt="" width="730" height="501" /></a></p>
<p>Pour ce qui est de la configuration de l&#8217;environnement de production pour le déploiement, nous n&#8217;avons pas à nous en soucier. On se contentera d&#8217;un environnement serveur en local.</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/project_laststep.png"><img class="aligncenter size-full wp-image-990" title="project_laststep" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/project_laststep.png" alt="" width="731" height="497" /></a></p>
<p>Enfin on pourra spécifier que l&#8217;on veut utiliser le framework Symfony et que l&#8217;on veut générer une application &laquo;&nbsp;frontend&nbsp;&raquo; (application web principale destinée aux visiteurs du site) et une application &laquo;&nbsp;backend&nbsp;&raquo; (application dédiée à l&#8217;administration et au backoffice de l&#8217;application principale).</p>
<h2><span style="text-decoration: underline;">3. Dans la pratique</span></h2>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/netbeans_symfony_capture.png"><img class="aligncenter size-large wp-image-992" title="netbeans_symfony_capture" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/netbeans_symfony_capture-1024x401.png" alt="" width="1024" height="401" /></a></p>
<p>Voici comment se présente notre projet Symfony sous Netbeans 6.8. Nous avons un très bon éditeur de YML / YAML avec coloration syntaxique, autocompletion et schéma hiérarchique</p>
<p>On pourra également utiliser l&#8217;outil de génération de code en ligne de commande de Symfony en allant sur &laquo;&nbsp;MySymfonyProject -&gt; click-droit -&gt; Run Symfony Command&nbsp;&raquo;.</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/symfony_cli.png"><img class="aligncenter size-full wp-image-995" title="symfony_cli" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/symfony_cli.png" alt="" width="687" height="538" /></a></p>
<p>On a le résultat de l&#8217;exécution de la ligne de commande dans le partie console de NetBeans cet outil est très pratique pour exécuter les tests-unitaires de LIME le framework de test intégré à Symfony.</p>
<p>On niveau du développement &laquo;&nbsp;pur&nbsp;&raquo;, on constate que l&#8217;autocompletion répond bien à la plupart des besoins de développeurs : les objets des vues, contrôleurs comme $sfWebRequest, $sfWebResponse, $view peuvent être appeler sans problème avec une intelliSense et même avec une petite documentation.</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/12/symfony_autocomplete.png"><img class="aligncenter size-full wp-image-1000" title="symfony_autocomplete" src="http://www.alexandre-julien.com/wp-content/uploads/2009/12/symfony_autocomplete.png" alt="" width="532" height="323" /></a></p>
<h2><span style="text-decoration: underline;"><strong>Conclusion</strong></span></h2>
<p>Ce support du framework Symfony est très intéressant à la fois pour la communauté des développeurs Symfony mais aussi pour NetBeans qui pourra peut être se faire une meilleure réputation dans le développement PHP car il faut le rappeler Symfony est le framework de développement PHP le plus utilisé avec Zend Framework . Les fonctionnalités de NetBeans vis à vis de ce framework sont très basiques mais relativement utiles. On regrettera peut être une meilleure intégration du framework de test unitaire et une génération de code plus importante. Peut-être vaut-il le coup d&#8217;être utiliser à la place d&#8217;Eclipse ou Aptana dans une optique de développement Symfony ? Ou aurons-nous du mal à nous séparer de nos bons vieux plugins sur Eclipse (pour Subversion, Database Explorer, PDT, Smarty, jQuery) ? Pour ma part, NetBeans a gagné ma confiance, je lui trouve une bonne ergonomie et une grande simplicité d&#8217;utilisation. Il existe une autre solution  pour le support de Symfony mais qui est quant-à-elle payante : il s&#8217;agit de PHPEdit il faut compter environ 219€ pour une version avec le support de Symfony et presque 300 € pour le support de PHPUnit et SVN.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/symfony/netbeans-6-8-ide-pour-developpement-php-symfony/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Aptana PHP Theme : mon petit thème de coloration syntaxique et d&#039;indentation sur Aptana Studio</title>
		<link>http://www.alexandre-julien.com/php/ide/aptana-studio/aptana-php-theme-mon-petit-theme-de-coloration-syntaxique-et-dindentation-sur-aptana-studio/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=aptana-php-theme-mon-petit-theme-de-coloration-syntaxique-et-dindentation-sur-aptana-studio</link>
		<comments>http://www.alexandre-julien.com/php/ide/aptana-studio/aptana-php-theme-mon-petit-theme-de-coloration-syntaxique-et-dindentation-sur-aptana-studio/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 20:17:09 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Aptana Studio]]></category>
		<category><![CDATA[aptana]]></category>
		<category><![CDATA[color]]></category>
		<category><![CDATA[studio]]></category>
		<category><![CDATA[syntax]]></category>
		<category><![CDATA[thème]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=916</guid>
		<description><![CDATA[Voici une petite coloration syntaxique et une norme d&#8217;indentation que j&#8217;ai personnalisé avec Aptana Studio. J&#8217;ai décidé de la faire partager au cas où quelqu&#8217;un serait à la recherche d&#8217;une idée de thème.
Aptana PHP Theme
]]></description>
			<content:encoded><![CDATA[<p>Voici une petite coloration syntaxique et une norme d&#8217;indentation que j&#8217;ai personnalisé avec Aptana Studio. J&#8217;ai décidé de la faire partager au cas où quelqu&#8217;un serait à la recherche d&#8217;une idée de thème.</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/10/Aptana-PHP-Theme.zip">Aptana PHP Theme</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/ide/aptana-studio/aptana-php-theme-mon-petit-theme-de-coloration-syntaxique-et-dindentation-sur-aptana-studio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Phoogle Map : release 2.1, nouveaux exemples, sources, compatibilité PHP 5.3</title>
		<link>http://www.alexandre-julien.com/php/phoogle-map/phoogle-map-release-2-1-nouveaux-exemples-sources-compatibilite-php-5-3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=phoogle-map-release-2-1-nouveaux-exemples-sources-compatibilite-php-5-3</link>
		<comments>http://www.alexandre-julien.com/php/phoogle-map/phoogle-map-release-2-1-nouveaux-exemples-sources-compatibilite-php-5-3/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 20:55:08 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Phoogle Map]]></category>
		<category><![CDATA[google map api]]></category>
		<category><![CDATA[GoogleMap]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[Phoogle]]></category>
		<category><![CDATA[PhoogleMap]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=903</guid>
		<description><![CDATA[ Nouvelle version de Phoogle Map 2.1 toujours basée sur l&#8217;API Google Map en version 2.0, cette nouvelle version offre une compatibilité avec PHP 5.3.
La sortie de cette nouvelle version s&#8217;accompagne d&#8217;une amélioration de la rubrique PhoogleMap sur le site avec des exemples téléchargeables, des  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/fbc_wide.png"><img class="alignleft size-medium wp-image-864" title="PhoogleMap" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/fbc_wide-300x188.png" alt="PhoogleMap" width="300" height="188" /></a> Nouvelle version de Phoogle Map 2.1 toujours basée sur l&#8217;API Google Map en version 2.0, cette nouvelle version offre une compatibilité avec PHP 5.3.</p>
<p>La sortie de cette nouvelle version s&#8217;accompagne d&#8217;une amélioration de la rubrique PhoogleMap sur le site avec des exemples téléchargeables, des sources mises à jour, une présentation approfondie, une PHP Doc en anglais, et des nouvelles ressources.</p>
<p>Très prochainement, je rajouterai une documentation complète en français et en anglais ainsi que de nouveaux exemples.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/phoogle-map/phoogle-map-release-2-1-nouveaux-exemples-sources-compatibilite-php-5-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aptana : un IDE orienté développement Web 2.0 pour PHP, Python, Ruby On Rails</title>
		<link>http://www.alexandre-julien.com/php/ide/aptana-un-ide-oriente-developpement-web-2-0-pour-php-python-ruby-on-rails/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=aptana-un-ide-oriente-developpement-web-2-0-pour-php-python-ruby-on-rails</link>
		<comments>http://www.alexandre-julien.com/php/ide/aptana-un-ide-oriente-developpement-web-2-0-pour-php-python-ruby-on-rails/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 16:01:33 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[IDE]]></category>
		<category><![CDATA[Adobe Spry]]></category>
		<category><![CDATA[aptana]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Mootools]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[sdk]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=824</guid>
		<description><![CDATA[
Aptana Studio est un IDE (Environnement de Développement orienté) Web 2.0 et basé sur les fondations d&#8217;Eclipse. Son principal avantage est qu&#8217;il n&#8217;utilise pas les plugin&#8217;s traditionnels d&#8217;Eclipse au profit de plugin&#8217;s développés par aptana qui sont beaucoup plus performants et plus astucieux.
Le  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/10/Aptana1StudioProfessional.JPG"><img class="aligncenter size-full wp-image-825" title="AptanaStudioProfessional" src="http://www.alexandre-julien.com/wp-content/uploads/2009/10/Aptana1StudioProfessional.JPG" alt="AptanaStudioProfessional" width="500" height="158" /></a></p>
<p>Aptana Studio est un IDE (Environnement de Développement orienté) Web 2.0 et basé sur les fondations d&#8217;Eclipse. Son principal avantage est qu&#8217;il n&#8217;utilise pas les plugin&#8217;s traditionnels d&#8217;Eclipse au profit de plugin&#8217;s développés par aptana qui sont beaucoup plus performants et plus astucieux.</p>
<p>Le logiciel est un environnement complet pour :</p>
<p>- PHP (sans passer le PDT d&#8217;Eclipse)</p>
<p>- Ruby On Rails</p>
<p>- Python Web</p>
<p>- Framework Javascript : jQuery, Prototype, Mootools, Adobe Spry, Dojo, &#8230;</p>
<p>- Javascript, HTML, CSS</p>
<p>- Application Adobe Air, Flex, &#8230;</p>
<p><span id="more-824"></span></p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/10/Aptana1.png"><img class="aligncenter size-large wp-image-826" title="Aptana" src="http://www.alexandre-julien.com/wp-content/uploads/2009/10/Aptana1-1024x640.png" alt="Aptana" width="1024" height="640" /></a></p>
<p>De plus, vous pourrez installer tous vos plugins préférés sur Aptana ou bien inversement, installer les plugins d&#8217;Aptana sur votre Eclipse existant !</p>
<p>Aptana est totalement libre et disponible sur Windows, MacOS X, Linux. Certaines personnes pourront également le coupler à une version 64 bits d&#8217;Eclipse sous Linux.</p>
<p>Rendez-vous sur le site Officiel : <a title="Aptana.com" href="http://www.aptana.com" target="_blank">http://www.aptana.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/ide/aptana-un-ide-oriente-developpement-web-2-0-pour-php-python-ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Joomla! API Framework MVC 1.5 : création d&#039;une application (tuto CRUD)</title>
		<link>http://www.alexandre-julien.com/php/joomla/joomla-api-framework-mvc-1-5-creation-dune-application-tuto-crud/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=joomla-api-framework-mvc-1-5-creation-dune-application-tuto-crud</link>
		<comments>http://www.alexandre-julien.com/php/joomla/joomla-api-framework-mvc-1-5-creation-dune-application-tuto-crud/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 19:38:00 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Joomla]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[cmf]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[component]]></category>
		<category><![CDATA[composant]]></category>
		<category><![CDATA[crud]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[tuto]]></category>
		<category><![CDATA[tutoriel]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=790</guid>
		<description><![CDATA[
Voici un tutorial pour créer une application &#171;&#160;composant&#160;&#187; sur Joomla! grâce à la nouvelle API basé sur Joomla framework MVC 1.5
Le gros avantage de la version 1.5 par rapport à la version 1.0, c&#8217;est qu&#8217;elle propose une API bien mieux construire et rend beaucoup plus agréable le développement  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/joomla-logo-vert-color1.png"><img class="aligncenter size-full wp-image-794" title="Joomla! Api" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/joomla-logo-vert-color1.png" alt="Joomla! Api" width="500" height="342" /></a></p>
<p>Voici un tutorial pour créer une application &laquo;&nbsp;composant&nbsp;&raquo; sur Joomla! grâce à la nouvelle API basé sur Joomla framework MVC 1.5</p>
<p>Le gros avantage de la version 1.5 par rapport à la version 1.0, c&#8217;est qu&#8217;elle propose une API bien mieux construire et rend beaucoup plus agréable le développement d&#8217;applications. Le nouveau framework est basé sur le design-pattern MVC bien que la couche modèle est quelque peu inutile, étant donné que Joomla 1.5 ne fonctionne avec rien d&#8217;autre que MySQL, cela dit, on a le choix entre les drivers &laquo;&nbsp;mysql&nbsp;&raquo; ou &laquo;&nbsp;mysqli&nbsp;&raquo;.</p>
<p>Nous illustrerons une application simple qui saisie des utilisateurs dans une table et qui les affiche sous la forme d&#8217;une liste. Cette application nous permettra de voir d&#8217;une façon pragmatique la structure des applications Joomla! et les fonctions de base du framework : création d&#8217;une classe modèle (ajout, mise à jour, suppression et requêtes en base de données), création d&#8217;un controller avec les actions de base (une action pour création et édition et une autre pour le listing), gestion des templates, redirections et notifications des erreurs et succès.</p>
<p>Télécharger Joomla! 1.5.x : <a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/Joomla_1.5.15-Stable-Full_Package1.zip">Joomla_1.5.15</a></p>
<p>Télécharger l&#8217;application : <a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/com_crud.zip">Joomla! Crud Tutoriel</a></p>
<p><span id="more-790"></span></p>
<p>Voici ci-dessous la hiérarchie de notre application, il s&#8217;agit d&#8217;un répertoire à créer dans le dossier &laquo;&nbsp;components&nbsp;&raquo; de Joomla! :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/joomla-component-hierarchy1.png"><img class="aligncenter size-full wp-image-798" title="joomla! component hierarchy" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/joomla-component-hierarchy1.png" alt="joomla! component hierarchy" width="198" height="254" /></a></p>
<p>Voici le script SQL correspondant à la table &laquo;&nbsp;jos_crud_users&nbsp;&raquo; qui contient les données :</p>
<pre class="brush: sql; title: ; notranslate">

--
-- Structure de la table `jos_crud_users`
--

CREATE TABLE IF NOT EXISTS `jos_crud_users` (
 `user_id` int(11) NOT NULL AUTO_INCREMENT,
 `user_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
 `user_lastname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
 `user_email` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
 PRIMARY KEY (`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
</pre>
<p>Voici le premier fichier à créer, &laquo;&nbsp;crud.php&nbsp;&raquo; il s&#8217;agit du fichier d&#8217;entrée qui est exécuté dès qu&#8217;un utilisateur visite l&#8217;application :</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php
/**
 * @package    Joomla.Crud
 * @subpackage Components
 * components/com_crud/crud.php
 * @link http://www.alexandre-julien.com
 * @author Alexandre JULIEN
 */

// Pas d'accès direct à la page
defined( '_JEXEC' ) or die( 'Restricted access' );

// Requiert la classe des contrôleurs

require_once( JPATH_COMPONENT.DS.'controller.php' );

// Requiert un contrôleur spécifique si demander
if($controller = JRequest::getVar('controller')) {
 $path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
 if (file_exists($path)) {
 require_once $path;
 } else {
 $controller = '';
 }
}

// Instanciation du contrôleur
$classname    = 'CrudController'.$controller;
$controller   = new $classname( );

// Execute la tâche demandée
$controller-&gt;execute( JRequest::getVar( 'task' ) );

// Redirection si elle est sollicitée par le contrôleur
$controller-&gt;redirect();
?&gt;
</pre>
<p>Voici maintenant le contrôleur, chaque méthode correspond à une tâche accessible par l&#8217;url : &laquo;&nbsp;index.php?option=com_crud&amp;task=lamethode&nbsp;&raquo;</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php
/**
 * @package    Joomla.Crud
 * @subpackage Components
 * @link http://www.alexandre-julien.com
 * @license GNU / GPL
 * @author Alexandre JULIEN
 */

// No direct access

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport('joomla.application.component.controller');

/**
 * Hello World Component Controller
 *
 * @package    Joomla.Tutorials
 * @subpackage Components
 */
class CrudController extends JController
{
 /**
 * Méthode d'affichage
 *
 * @access    public
 */
 function display()
 {
 $model = $this-&gt;getModel();
 $view = $this-&gt;getView('list', 'html');
 $view-&gt;users = $model-&gt;getAllUsers();
 $view-&gt;display();
 }

 /**
 * Formulaire de création d'un utilisateur
 * @return unknown_type
 */
 function add()
 {
 $view =&amp; $this-&gt;getView('edit', 'html');
 $view-&gt;display();
 }

 /**
 * Formulaire d'édition d'un utilisateur
 * @return unknown_type
 */
 function edit()
 {
 if (isset($_GET) &amp;&amp; isset($_GET['id']))
 {
 $view = $this-&gt;getView ('edit', 'html');
 $model =&amp; $this-&gt;getModel();
 $view-&gt;data = $model-&gt;getUser($_GET['id']);
 $view-&gt;display();
 }
 else
 {
 $this-&gt;setRedirect('index.php?option=com_crud', &quot;L'identifiant est manquant&quot;, 'error');
 }
 }

 /**
 * Sauvegarde d'un utilisateur
 * @return unknown_type
 */
 function save()
 {
 if (isset($_POST))
 {
 $model =&amp; $this-&gt;getModel();
 if (isset($_POST['id']) &amp;&amp; $model-&gt;getUser($_POST['id']))
 {
 $model-&gt;updateUser($_POST);
 }
 else
 {
 $model-&gt;addUser($_POST);
 }
 $this-&gt;setRedirect('index.php?option=com_crud', &quot;Les modifications ont bien été enregistrées&quot;, 'message');
 }
 else
 {
 $this-&gt;setRedirect('index.php?option=com_crud', &quot;Les données sont manquantes&quot;, 'error');
 }
 }

 /**
 * Suppression d'un utilisateur
 * @return unknown_type
 */
 function delete()
 {
 if (isset($_GET) &amp;&amp; isset($_GET['id']))
 {
 $model =&amp; $this-&gt;getModel();
 $model-&gt;removeUser($_GET['id']);
 $this-&gt;setRedirect('index.php?option=com_crud', &quot;L'utilisateur a bien été supprimé&quot;, 'message');
 }
 else
 {
 $this-&gt;setRedirect('index.php?option=com_crud', &quot;L'identifiant est manquant&quot;, 'error');
 }
 }
}
?&gt;
</pre>
<p>La couche modèle qui gère les transactions avec la base de données dans le fichiers &laquo;&nbsp;models/crud.php&nbsp;&raquo; :</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php
/**
 * Crud modèle pour le composant Crud
 *
 * @package    Joomla.Crud
 * @subpackage Components
 * @link http://www.alexandre-julien.com
 * @license    GNU/GPL
 * @author Alexandre JULIEN
 */

// Pas d'accès direct

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.application.component.model' );

/**
 * Modèle Crud
 *
 * @package    Joomla.Crud
 * @subpackage Components
 */
class CrudModelCrud extends JModel
{
 /**
 * Retourne tous les enregistrements de la table
 * @return unknown_type
 */
 function getAllUsers()
 {
 $query = 'SELECT * FROM #__crud_users';
 return $this-&gt;_getList ($query);
 }

 /**
 * Retourne l'enregistrement en fonction de l'identifiant de l'utilisateur
 * @param $user_id
 * @return unknown_type
 */
 function getUser ($user_id)
 {
 $query = 'SELECT * FROM #__crud_users WHERE user_id = '.(int)$user_id;
 $result = $this-&gt;_getList ($query);
 return $result[0];
 }

 /**
 * Ajoute un enregistrement
 * @param $values
 * @return unknown_type
 */
 function addUser ($values)
 {
 $db =&amp; JFactory::getDBO();

 $row = new stdClass();
 $row-&gt;user_name = $values['user_name'];
 $row-&gt;user_lastname = $values['user_lastname'];
 $row-&gt;user_email = $values['user_email'];

 $db-&gt;insertObject ('#__crud_users', $row);
 }

 /**
 * Met à jour un enregistrement
 * @param $values
 * @return unknown_type
 */
 function updateUser ($values)
 {
 $db =&amp; JFactory::getDBO();

 $row = new stdClass();
 $row-&gt;user_id = $values['user_id'];
 $row-&gt;user_name = $values['user_name'];
 $row-&gt;user_lastname = $values['user_lastname'];
 $row-&gt;user_email = $values['user_email'];

 $db-&gt;updateObject ('#__crud_users', $row, 'user_id');
 }

 /**
 * Supprime un enregistrement
 * @param $id
 * @return unknown_type
 */
 function removeUser ($id)
 {
 $db =&amp; JFactory::getDBO();
 $query = 'DELETE FROM #__crud_users WHERE user_id = '.(int)$id;
 $db-&gt;setQuery($query);
 return $this-&gt;query();
 }
}
?&gt;
</pre>
<p>Voici un exemple de fichier &laquo;&nbsp;View.html.php&nbsp;&raquo;, il s&#8217;agit de celui de l&#8217;écran de listing :</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php
/**
 * @package    Joomla.Crud
 * @subpackage Components
 * @link http://www.alexandre-julien.com
 * @license   GNU/GPL
 * @author Alexandre JULIEN
 */

// Pas d'accès direct

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.application.component.view');

/**
 * HTML View pour afficher la liste des utilisateurs
 *
 * @package    Crud
 */

class CrudViewList extends JView
{
 function display($tpl = null)
 {
 $this-&gt;assignRef('data', $this-&gt;users);
 parent::display($tpl);
 }
}
?&gt;
</pre>
<p>Le template de la vue &laquo;&nbsp;edit&nbsp;&raquo; :</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

// Pas d'accès direct

defined('_JEXEC') or die('Restricted access'); ?&gt;

&lt;h1&gt;Edition d'un utilisateur&lt;/h1&gt;
&lt;form name=&quot;utilisateur&quot; method=&quot;POST&quot;
	action=&quot;&lt;?php echo JRoute::_('index.php?option=com_crud&amp;task=save') ?&gt;&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;user_id&quot; value=&quot;&lt;?php echo $this-&gt;data-&gt;user_id ?&gt;&quot; /&gt;
&lt;table&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;th&gt;Prénom de l'utilisateur&lt;/th&gt;
			&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;user_name&quot;
				value=&quot;&lt;?php if (isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_name; } ?&gt;&quot; /&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;Nom de l'utilisateur&lt;/th&gt;
			&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;user_lastname&quot;
				value=&quot;&lt;?php if(isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_lastname; } ?&gt;&quot; /&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;Email de l'utilisateur&lt;/th&gt;
			&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;user_email&quot;
				value=&quot;&lt;?php if(isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_email; } ?&gt;&quot;&gt;&lt;/input&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;br /&gt;
&lt;br /&gt;
&lt;input type=&quot;submit&quot; value=&quot;Enregistrer&quot; /&gt;&lt;/form&gt;
</pre>
<p>Le template de la vue &laquo;&nbsp;list&nbsp;&raquo; :</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

// Pas d'accès direct

defined('_JEXEC') or die('Restricted access'); ?&gt;

&lt;h1&gt;Liste des utilisateurs&lt;/h1&gt;

&lt;table&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;th&gt;Nom&lt;/th&gt;
			&lt;th&gt;Prénom&lt;/th&gt;
			&lt;th&gt;Adresse e-mail&lt;/th&gt;
			&lt;th&gt;Actions&lt;/th&gt;
		&lt;/tr&gt;
		&lt;?php foreach ($this-&gt;data as $key =&gt; $value) { ?&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;?php echo $value-&gt;user_lastname ?&gt;&lt;/td&gt;
			&lt;td&gt;&lt;?php echo $value-&gt;user_name ?&gt;&lt;/td&gt;
			&lt;td&gt;&lt;?php echo $value-&gt;user_email ?&gt;&lt;/td&gt;
			&lt;td&gt;&lt;a
				href=&quot;&lt;?php echo JRoute::_('index.php?option=com_crud&amp;task=edit&amp;id='.(int)$value-&gt;user_id) ?&gt;&quot;&gt;
			Editer &lt;/a&gt; | &lt;a
				href=&quot;&lt;?php echo JRoute::_('index.php?option=com_crud&amp;task=delete&amp;id='.(int)$value-&gt;user_id) ?&gt;&quot;&gt;Supprimer&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;?php } ?&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
&lt;a href=&quot;&lt;?php echo JRoute::_('index.php?option=com_crud&amp;task=add') ?&gt;&quot;&gt;
Créer un utilisateur &lt;/a&gt;
</pre>
<p>On pourra également créer un package Joomla! qui automatisera l&#8217;installation des fichiers et des tables SQL grâce à un fichier de configuration d&#8217;installation &laquo;&nbsp;hello.xml&nbsp;&raquo; :</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;!DOCTYPE install SYSTEM &quot;http://www.joomla.org/xml/dtd/1.5/component-install.dtd&quot;&gt;
&lt;install type=&quot;component&quot; version=&quot;1.5.0&quot;&gt;
  &lt;name&gt;crud&lt;/name&gt;
  &lt;!-- Les éléments suivants sont optionnels  --&gt;
  &lt;creationDate&gt;2009 09 21&lt;/creationDate&gt;
  &lt;author&gt;Alexandre JULIEN&lt;/author&gt;
  &lt;authorEmail&gt;mail@alexandre.julien.com&lt;/authorEmail&gt;
  &lt;authorUrl&gt;http://www.alexandre-julien.com&lt;/authorUrl&gt;
  &lt;copyright&gt;Le blog d'Alex&lt;/copyright&gt;
  &lt;license&gt;GNU / GPL&lt;/license&gt;
  &lt;!--  Version du composant --&gt;
  &lt;version&gt;stable 1.0&lt;/version&gt;
  &lt;!-- Description du Composant --&gt;
  &lt;description&gt;Petit tutoriel CRUD pour illustrer Joomla! MVC Framework&lt;/description&gt;

  &lt;!-- Fichiers d'installation --&gt;
  &lt;files folder=&quot;site&quot;&gt;
    &lt;filename&gt;crud.php&lt;/filename&gt;
    &lt;filename&gt;controller.php&lt;/filename&gt;
    &lt;filename&gt;models/crud.php&lt;/filename&gt;
    &lt;filename&gt;views/edit/view.html.php&lt;/filename&gt;
    &lt;filename&gt;views/edit/tmpl/default.php&lt;/filename&gt;
    &lt;filename&gt;views/list/view.html.php&lt;/filename&gt;
    &lt;filename&gt;views/list/tmpl/default.php&lt;/filename&gt;
  &lt;/files&gt;
  &lt;install&gt;
    &lt;sql&gt;
      &lt;file charset=&quot;uft8&quot; driver=&quot;mysql&quot;&gt;install.sql&lt;/file&gt;
      &lt;file charset=&quot;utf8&quot; driver=&quot;mysqli&quot;&gt;install.sql&lt;/file&gt;
    &lt;/sql&gt;
  &lt;/install&gt;
  &lt;uninstall&gt;
    &lt;sql&gt;
      &lt;file charset=&quot;utf8&quot; driver=&quot;mysql&quot;&gt;uninstall.sql&lt;/file&gt;
      &lt;file charset=&quot;utf8&quot; driver=&quot;mysqli&quot;&gt;uninstall.sql&lt;/file&gt;
    &lt;/sql&gt;
  &lt;/uninstall&gt;
  &lt;administration&gt;
    &lt;!-- Administration Menu Section --&gt;
    &lt;menu&gt;Joomla! CRUD&lt;/menu&gt;

    &lt;!-- Fichiers de la partie administration --&gt;
    &lt;files folder=&quot;admin&quot;&gt;
      &lt;filename&gt;index.html&lt;/filename&gt;
      &lt;filename&gt;install.sql&lt;/filename&gt;
      &lt;filename&gt;uninstall.sql&lt;/filename&gt;
    &lt;/files&gt;
  &lt;/administration&gt;
&lt;/install&gt;
</pre>
<p>Voici des &laquo;&nbsp;screenshots&nbsp;&raquo; de notre application finale :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/add_joomla1.png"><img class="aligncenter size-full wp-image-806" title="Joomla Crud Tuto MVC" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/add_joomla1.png" alt="Joomla Crud Tuto MVC" width="595" height="353" /></a><br />
<a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/list_joomla.png"><img class="aligncenter size-full wp-image-807" title="List Joomla Tuto MVC" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/list_joomla.png" alt="List Joomla Tuto MVC" width="594" height="383" /></a></p>
<p>L&#8217;application est disponible ici dans cette archive : <a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/crud.zip">Tutoriel Joomla! CRUD (installation package)</a></p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 5658px; width: 1px; height: 1px;">&lt;?php</p>
<p>// Pas d&#8217;accÃ¨s direct</p>
<p>defined(&#8216;_JEXEC&#8217;) or die(&#8216;Restricted access&#8217;); ?&gt;</p>
<p>&lt;h1&gt;Edition d&#8217;un utilisateur&lt;/h1&gt;<br />
&lt;form name=&nbsp;&raquo;utilisateur&nbsp;&raquo; method=&nbsp;&raquo;POST&nbsp;&raquo;<br />
action=&nbsp;&raquo;&lt;?php echo JRoute::_(&#8216;index.php?option=com_crud&amp;task=save&#8217;) ?&gt;&nbsp;&raquo;&gt;<br />
&lt;input type=&nbsp;&raquo;hidden&nbsp;&raquo; name=&nbsp;&raquo;user_id&nbsp;&raquo; value=&nbsp;&raquo;&lt;?php echo $this-&gt;data-&gt;user_id ?&gt;&nbsp;&raquo; /&gt;<br />
&lt;table&gt;<br />
&lt;tbody&gt;<br />
&lt;tr&gt;<br />
&lt;th&gt;PrÃ©nom de l&#8217;utilisateur&lt;/th&gt;<br />
&lt;td&gt;&lt;input type=&nbsp;&raquo;text&nbsp;&raquo; name=&nbsp;&raquo;user_name&nbsp;&raquo;<br />
value=&nbsp;&raquo;&lt;?php if (isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_name; } ?&gt;&nbsp;&raquo; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;th&gt;Nom de l&#8217;utilisateur&lt;/th&gt;<br />
&lt;td&gt;&lt;input type=&nbsp;&raquo;text&nbsp;&raquo; name=&nbsp;&raquo;user_lastname&nbsp;&raquo;<br />
value=&nbsp;&raquo;&lt;?php if(isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_lastname; } ?&gt;&nbsp;&raquo; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;th&gt;Email de l&#8217;utilisateur&lt;/th&gt;<br />
&lt;td&gt;&lt;input type=&nbsp;&raquo;text&nbsp;&raquo; name=&nbsp;&raquo;user_email&nbsp;&raquo;<br />
value=&nbsp;&raquo;&lt;?php if(isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_email; } ?&gt;&nbsp;&raquo;&gt;&lt;/input&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/tbody&gt;<br />
&lt;/table&gt;</p>
<p>&lt;br /&gt;<br />
&lt;br /&gt;<br />
&lt;input type=&nbsp;&raquo;submit&nbsp;&raquo; value=&nbsp;&raquo;Enregistrer&nbsp;&raquo; /&gt;&lt;/form&gt;</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/joomla/joomla-api-framework-mvc-1-5-creation-dune-application-tuto-crud/feed/</wfw:commentRss>
		<slash:comments>69</slash:comments>
		</item>
		<item>
		<title>Zend Framework tutoriel #4 : Création de formulaire et validations avec Zend_Form et Zend_Validate</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-tutoriel-4-creation-de-formulaire-et-validations-avec-zend_form-et-zend_validate/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-tutoriel-4-creation-de-formulaire-et-validations-avec-zend_form-et-zend_validate</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-tutoriel-4-creation-de-formulaire-et-validations-avec-zend_form-et-zend_validate/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 19:30:30 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[formulaire]]></category>
		<category><![CDATA[validateur]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zend_form]]></category>
		<category><![CDATA[zend_validate]]></category>
		<category><![CDATA[zf]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=763</guid>
		<description><![CDATA[
Zend Framework possède son propre outil pour gérer les formulaires correctement : Zend_Form est là pour ça !
Il s&#8217;agit d&#8217;une librairie qui gère vos composants de formulaires (y compris leur rendu), les validations, le filtrage des données, et la gestion de sous-formulaires.
La librairie  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/forms.jpg"><img class="size-medium wp-image-766 aligncenter" title="forms" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/forms-300x227.jpg" alt="forms" width="300" height="227" /></a></p>
<p>Zend Framework possède son propre outil pour gérer les formulaires correctement : Zend_Form est là pour ça !<br />
Il s&#8217;agit d&#8217;une librairie qui gère vos composants de formulaires (y compris leur rendu), les validations, le filtrage des données, et la gestion de sous-formulaires.<br />
La librairie Zend_Validate qui gère les validateurs sera aussi utiliser dans ce tutoriel afin d&#8217;illustrer les validations de formulaire et ce de façon personnalisé.</p>
<p><span id="more-763"></span></p>
<p>Tout d&#8217;abord nous allons voir les principes basiques des formulaires avec Zend Framework : <strong>il nous faudra ajouter un dossier &laquo;&nbsp;forms&nbsp;&raquo; dans notre répertoire &laquo;&nbsp;application&nbsp;&raquo;</strong>.</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/forms_folder.png"><img class="aligncenter size-full wp-image-770" title="forms_folder" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/forms_folder.png" alt="forms_folder" width="377" height="133" /> </a></p>
<p>Voici un premier example de la création d&#8217;un formulaire dans notre fichier &laquo;&nbsp;Author.php&nbsp;&raquo;. Il s&#8217;agit d&#8217;une classe qui correspondra à un formulaire d&#8217;inscription d&#8217;un auteur :</p>
<pre class="brush: php; title: ; notranslate">
class Form_Author extends Zend_Form
{
  /**
   * Surcharge du constructeur du formulaire
   */
  public function __construct($options = null)
  {
    parent::__construct($options = null)
    $this-&gt;setName('subscription'); // On nomme le formulaire

    $id = new Zend_Form_Element_Hidden('id'); // On rajoute un champs caché

    $email = new Zend_Form_Element_Text('email');
    $email-&gt;setRequired(true)
          -&gt;setLabel('Veuillez saisir votre e-mail');

     // Nous avons rajouter un attribut obligatoire à notre email et nous lui avons donné un libellé avant le champs texte

    // Ensuite on peut insérer les composants (elements) dans le formulaire
    $this-&gt;addElements($id, $email);

  }
}
</pre>
<p>Nous avons réaliser une ébauche de formulaire, pour l&#8217;utiliser dans notre contrôleur et vue, rien de plus simple</p>
<p>AuthorController.php</p>
<pre class="brush: php; title: ; notranslate">

function suscribeAction ()

{

$form = new Form_Author(); // On instancie le formulaire

$this-&gt;view-&gt;form = $form // On le renvoie à la vue

}

// Pour l'éditer il faut renvoyer les informations au formulaire

function editsubscriptionAction()

{

$form = new Form_Author();

$model = new Model_DbTable_Author();

$data = $model-&gt;getAuthor('5'); // On récupère toutes les données d'un auteur dans la base de données

$form-&gt;populate ($data); // On propulse les données dans le formulaire

$this-&gt;view-&gt;form = $form;

}
</pre>
<p>Ensuite dans la vue, on affiche le formulaire et on définit son action :</p>
<p>Author.phtml</p>
<pre class="brush: php; title: ; notranslate">
echo $this-&gt;form;
$this-&gt;form&gt;setAction(author/save); // On définit l'action qui récupère le formulaire
</pre>
<p>Voici un exemple beaucoup plus complet d&#8217;un formulaire avec des validateurs, internationalisation et un captcha :</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
class Form_Author extends Zend_Form
{
public function __construct($options = null)
{
parent::__construct($options);
$this-&gt;setName('Subscription');
$id = new Zend_Form_Element_Hidden('id');

$translate = Zend_Registry::get('translate');

$emptyValidator = new Zend_Validate_NotEmpty();
$emptyValidator-&gt;setMessage($translate-&gt;_(&quot;Ce champs est vide : vous devez le compléter&quot;));

$emailValidator = new Zend_Validate_EmailAddress();
$emailValidator-&gt;setMessage($translate-&gt;_('L\'adresse email n\'est pas valide'));

$primaryValidator = new Zend_Validate_Db_NoRecordExists('users', 'username');
$primaryValidator-&gt;setMessage($translate-&gt;_(&quot;L'adresse email a déjà été utilisée&quot;), Zend_Validate_Db_Abstract::ERROR_RECORD_FOUND);

$stringLengthValdiator = new Zend_Validate_StringLength(6, 12);
$stringLengthValdiator-&gt;setMessage($translate-&gt;_('La longueur du mot de pase doit être comprise entre 6 et 12 caractères'));

$email = new Zend_Form_Element_Text('email');
$email-&gt;setLabel($translate-&gt;_('Email'))
-&gt;setRequired(true)
-&gt;addFilter('StripTags')
-&gt;addFilter('StringTrim')
-&gt;addValidator($emailValidator)
-&gt;addValidator($primaryValidator)
-&gt;addValidator($emptyValidator);

$password = new Zend_Form_Element_Password('password');
$password-&gt;setLabel($translate-&gt;_('mot de passe'));
$password-&gt;addValidator($stringLengthValdiator);
$password-&gt;addValidator($emptyValidator);

$password_verification = new Zend_Form_Element_Password ('password_confirm');
$password_verification-&gt;setLabel ($translate-&gt;_('retapez le mot de passe pour vérification'));
$password_verification-&gt;addValidator($emptyValidator);
if (isset($_POST['password'])) {
$passwordVerificationValidator = new Zend_Validate_Identical($_POST['password']);
$passwordVerificationValidator-&gt;setMessage($translate-&gt;_('Les mots de passe ne correspondent pas'));
$password_verification-&gt;addValidator($passwordVerificationValidator);
}

$sex = new Zend_Form_Element_Radio('sex', array('separator' =&gt; ' '));
$sex-&gt;setMultiOptions (array('male' =&gt; 'Homme', 'female' =&gt; 'Femme '))
-&gt;setLabel($translate-&gt;_('Sexe'))
-&gt; isRequired(true);

$name = new Zend_Form_Element_Text('name');
$name-&gt;setLabel($translate-&gt;_('Prénom'))
-&gt;setRequired(true)
-&gt;addFilter('StripTags')
-&gt;addFilter('StringTrim')
-&gt;addValidator($emptyValidator);

$surname = new Zend_Form_Element_Text('surname');
$surname-&gt;setLabel($translate-&gt;_('Nom'))
-&gt;setRequired(true)
-&gt;addFilter('StripTags')
-&gt;addFilter('StringTrim')
-&gt;addValidator($emptyValidator);

$address = new Zend_Form_Element_Text('address_author');
$address-&gt;setLabel($translate-&gt;_('Adresse'))
-&gt;setRequired(true)
-&gt;addFilter('StripTags')
-&gt;addFilter('StringTrim')
-&gt;addValidator($emptyValidator);

$zip_code = new Zend_Form_Element_Text('zip_code_author');
$zip_code-&gt;setLabel($translate-&gt;_('Code Postal'))
-&gt;setRequired(true)
-&gt;addFilter('StripTags')
-&gt;addFilter('StringTrim')
-&gt;addValidator($emptyValidator);

$city = new Zend_Form_Element_Text('city_author');
$city-&gt;setLabel($translate-&gt;_('Ville'))
-&gt;setRequired(true)
-&gt;addFilter('StripTags')
-&gt;addFilter('StringTrim')
-&gt;addValidator($emptyValidator);

$phone = new Zend_Form_Element_Text('phone');
$phone-&gt;setLabel($translate-&gt;_('Téléphone'))
-&gt;setRequired(true)
-&gt;addFilter('StripTags')
-&gt;addFilter('StringTrim')
-&gt;addValidator($emptyValidator);

}

$submit = new Zend_Form_Element_Submit('valid');
$submit-&gt;setAttrib('id', 'submitbutton')
-&gt;setLabel($translate-&gt;_('Enregistrer l\'annonce'));

 $this-&gt;addElements(array($id, $email,$password, $password_verification, $sex, $name, $surname, $address, $zip_code, $city, $phone, $submit));
}
}
?&gt;
</pre>
<p>Dans le prochaine tutorial, nous verrons comment mettre en application tout ce que nous avons vu précédemment dans un &laquo;&nbsp;CRUD&nbsp;&raquo; (Create Read Update Delete) qui illustrera l&#8217;utilisateur du design-pattern MVC, Zend_Db, Zend_Form, Zend_Validate et Zend_Layout.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-tutoriel-4-creation-de-formulaire-et-validations-avec-zend_form-et-zend_validate/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Sympal : le CMS / CMF du framework Symfony</title>
		<link>http://www.alexandre-julien.com/php/symfony/sympal-le-cms-cmf-du-framework-symfony/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sympal-le-cms-cmf-du-framework-symfony</link>
		<comments>http://www.alexandre-julien.com/php/symfony/sympal-le-cms-cmf-du-framework-symfony/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 16:07:16 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[screencast]]></category>
		<category><![CDATA[sympal]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=722</guid>
		<description><![CDATA[Sympal est un projet très intéressant de Sensio Labs (société de services à l&#8217;origine de Symfony et Doctrine), un plugin très sérieux pour intégrer un CMS dans une application Symfony ! Apparement, on peut supposer au nom que ce projet va reprendre certaines caractéristiques du CMS Drupal mais il  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/sympal.png"><img class="aligncenter size-full wp-image-726" title="sympal" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/sympal.png" alt="sympal" width="180" height="130" /></a>Sympal est un projet très intéressant de Sensio Labs (société de services à l&#8217;origine de Symfony et Doctrine), un plugin très sérieux pour intégrer un CMS dans une application Symfony ! Apparement, on peut supposer au nom que ce projet va reprendre certaines caractéristiques du CMS Drupal mais il n&#8217;y aura aucun code de Drupal à l&#8217;intérieur.</p>
<p>Il s&#8217;agit avant tout d&#8217;un projet Symfony 1.2 qui utilise le design pattern MVC, Doctrine et Symfony.</p>
<p>Le projet a l&#8217;air très prometteur, il est toujours en version de test mais on peut dors-et-déjà le télécharger sur le site Officiel : <a title="Sympal" href="http://www.sympalphp.org" target="_blank"><strong>http://www.sympalphp.org</strong></a></p>
<p>Le CMS a l&#8217;air tout aussi complet qu&#8217;un Drupal, Spip ou Joomla et s&#8217;intègrera parfaitement avec les applications Symfony.</p>
<p>Voici 2 screencasts présents sur le site officiel pour illustrer le fonctionnement de l&#8217;application :</p>
<p><span id="more-722"></span></p>
<p align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="800" height="480" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="high" /><param name="src" value="http://www.sympalphp.com/uploads/screencasts/1.swf" /><embed type="application/x-shockwave-flash" width="800" height="480" src="http://www.sympalphp.com/uploads/screencasts/1.swf" quality="high"></embed></object></p>
<p align="center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="800" height="480" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="high" /><param name="src" value="http://www.sympalphp.com/uploads/screencasts/2.swf" /><embed type="application/x-shockwave-flash" width="800" height="480" src="http://www.sympalphp.com/uploads/screencasts/2.swf" quality="high"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/symfony/sympal-le-cms-cmf-du-framework-symfony/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZFDebug (Scienta ZF Debug Bar) : une &quot;web debug toolbar&quot; pour Zend Framework</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-php/zfdebug-scienta-zf-debug-bar-une-web-debug-toolbar-pour-zend-framework/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zfdebug-scienta-zf-debug-bar-une-web-debug-toolbar-pour-zend-framework</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-php/zfdebug-scienta-zf-debug-bar-une-web-debug-toolbar-pour-zend-framework/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 15:02:48 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Debug bar]]></category>
		<category><![CDATA[Scienta ZF]]></category>
		<category><![CDATA[ZFDebug]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=715</guid>
		<description><![CDATA[
Très rensemblante à la debug bar de Symfony, un petit projet fait avec Zend Framework nommé ZFDebug ravira beaucoup de développeurs Symfony. Il s&#8217;agit d&#8217;une petite debug bar qui se place en haut de la page web et qui renseigne le développeur sur un grand nombre d&#8217;informations : temps de réponse,  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/2009-scienta_debugbar.png"><img class="aligncenter size-full wp-image-717" title="2009-scienta_debugbar" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/2009-scienta_debugbar.png" alt="2009-scienta_debugbar" width="569" height="21" /></a></p>
<p>Très rensemblante à la debug bar de Symfony, un petit projet fait avec Zend Framework nommé ZFDebug ravira beaucoup de développeurs Symfony. Il s&#8217;agit d&#8217;une petite debug bar qui se place en haut de la page web et qui renseigne le développeur sur un grand nombre d&#8217;informations : temps de réponse, utilisation de la mémoire, requêtes à la base de données, &#8230;</p>
<p><span id="more-715"></span>Les principales informations qu&#8217;offre ZFDebug sont les suivantes :</p>
<ul>
<li>Cache: Informations sur Zend_Cache et APC</li>
<li>Database: Liste des requêtes SQL avec les temps d&#8217;exécution</li>
<li>Exception: Affichage des erreurs et des exceptions</li>
<li>File: Liste de fichiers inclus et leurs tailles.</li>
<li>Html: Nombre de fichiers CSS et Javascript associés à la page.</li>
<li>Memory: Utilisation de la mémoire d&#8217;un contrôleur avec statistiques détaillées.</li>
<li>Registry: Contenu de Zend_Registry</li>
<li>Time: Temps d&#8217;exécution des actions du contrôleur</li>
<li>Variables: Valeurs des variables et contenus des variables $_COOKIES et $_POST.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-php/zfdebug-scienta-zf-debug-bar-une-web-debug-toolbar-pour-zend-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework : nouvelle release 1.9.2</title>
		<link>http://www.alexandre-julien.com/non-classe/zend-framework-nouvelle-release-1-9-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-nouvelle-release-1-9-2</link>
		<comments>http://www.alexandre-julien.com/non-classe/zend-framework-nouvelle-release-1-9-2/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 11:54:50 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=684</guid>
		<description><![CDATA[
Nouvelle version de Zend Framework, elle corrige une quarantaine de bugs
Voici la liste issue de la changelog&#8230;

Bugs corrigés :

 [ZF-7605]: Zend_Application docs mistake
 [ZF-7550]: Bootstrap fails after checking out r17414
 [ZF-7417]: clarify confusion between &#8216;resource plugins&#8217; and &#8216;resources&#8217;  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/banner_zf_logo_v1_9.jpg"><img class="aligncenter size-full wp-image-685" title="Zend Framework 1.9.2" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/banner_zf_logo_v1_9.jpg" alt="Zend Framework 1.9.2" width="429" height="255" /></a></p>
<p>Nouvelle version de Zend Framework, elle corrige une quarantaine de bugs</p>
<p>Voici la liste issue de la changelog&#8230;</p>
<p><span id="more-684"></span></p>
<h4>Bugs corrigés :</h4>
<ul>
<li><a href="http://framework.zend.com/issues/browse/ZF-7605"> [ZF-7605]</a>: Zend_Application docs mistake</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7550"> [ZF-7550]</a>: Bootstrap fails after checking out r17414</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7417"> [ZF-7417]</a>: clarify confusion between &#8216;resource plugins&#8217; and &#8216;resources&#8217; in docs</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7401"> [ZF-7401]</a>: Errors in QuickStart</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7158"> [ZF-7158]</a>: No automatic creation of Zend_Application_Module_Autoloader for default module</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7095"> [ZF-7095]</a>: Zend_Application_Resource_Modules Example is wrong</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7091"> [ZF-7091]</a>: &laquo;&nbsp;scripts/load.sqlite.php&nbsp;&raquo; is missing &laquo;&nbsp;set_include_path&nbsp;&raquo;</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-6893"> [ZF-6893]</a>: Cannot use Zend_Application_Resource_FrontController to set baseurl for a subset of environments</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-6861"> [ZF-6861]</a>: Stripping all require_once calls makes Zend_Application unable to work</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-6803"> [ZF-6803]</a>: Zend_Application Default Module Bootstrap is Skipped</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-6679"> [ZF-6679]</a>: Items configured from Zend_Application::setOptions() via a config entry do not have their keys cast to lower case</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-6659"> [ZF-6659]</a>: Module bootstrap implementation</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-6634"> [ZF-6634]</a>: include warning with same module and namespace name</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-4730"> [ZF-4730]</a>: Add possibility to check group-membership in Zend_Auth_Adapter_Ldap</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7358"> [ZF-7358]</a>: Zend_Cache_Backend_ZendServer_ShMem and Zend_Cache_Backend_ZendServer_Disk throws an exception in test()</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7172"> [ZF-7172]</a>: How to instatiate the ZendServer cache backends</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-6291"> [ZF-6291]</a>: Zend_Cache::factory() denies creation of Zend_Cache_Backend_TwoLevels backend on Linux</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-5740"> [ZF-5740]</a>: Partial cleaning in Zend_Cache_Backend_TwoLevels::clean()</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7589"> [ZF-7589]</a>: Zend_Date::setDate when parsing the date to set in an array</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7554"> [ZF-7554]</a>: testSetLocale(Zend_DateTest) unit tests failure</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7456"> [ZF-7456]</a>: Regression in 1.9 in ability to create Zend_Date from array</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7454"> [ZF-7454]</a>: Timezone and Zend_Date</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7647"> [ZF-7647]</a>: fetchAssoc() and fetchPairs() in Zend_Db_Adapter_Abstract have wrong docblock return type</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7629"> [ZF-7629]</a>: Zend_Db_Adapter_Pdo_Mssql should pass @table_owner to sp_pkeys</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-5823"> [ZF-5823]</a>: Non-optimized SQL generated for LIMIT clause in MSSQL adapter</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-4251"> [ZF-4251]</a>: Zend_Db_Adapter_Pdo_Mssql doeas not support both LIMIT and DISTINCT in the same query</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-4099"> [ZF-4099]</a>: Zend_Db_Adapter_Pdo_Mssql &#8211; Order By in Limit Function</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-3434"> [ZF-3434]</a>: PDO_Mssql DSN includes _config['options']</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-3216"> [ZF-3216]</a>: Zend_Db_Adapter_Mysqli does not provide a proper way to catch MySQL error codes.</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7549"> [ZF-7549]</a>: Missing prefix and type parameters in the PHPdoc for most of the addPrefixPath methods</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7544"> [ZF-7544]</a>: Fatal Error when setting same FilterRule more than one time in script call</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7135"> [ZF-7135]</a>: null values are treated as missing data instead of an empty value</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7449"> [ZF-7449]</a>: Directive $element-&gt;setRegisterInArrayValidator(false) doesn&#8217;t work anymore</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7208"> [ZF-7208]</a>: Incubator unit tests stop with fatal error &#8216;Class &#8216;Zend_Ldap_AllTests&#8217; not found&#8217;</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7604"> [ZF-7604]</a>: No Zend_Log_Writer_Syslog::setApplication() hence documentation</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7614"> [ZF-7614]</a>: Incorrect function name in the #42.2 manual entry</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7613"> [ZF-7613]</a>: There is not &laquo;&nbsp;factory&nbsp;&raquo; method in the Zend_Queue class</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7560"> [ZF-7560]</a>: Zend_Translate_Adapter does not properly handle numeric key values</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7648"> [ZF-7648]</a>: testNotSameMessageContainsTokenAndValue(Zend_Validate_IdenticalTest) unit tests failure</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7643"> [ZF-7643]</a>: Empty token value in Zend_Validate_Identical::NOT_SAME</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7631"> [ZF-7631]</a>: Zend_Validate_NotEmpty compatibility</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7630"> [ZF-7630]</a>: Zend_Validate_Date doesn&#8217;t accept Zend_Date object</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-6457"> [ZF-6457]</a>: Zend_Validate_Date doesn&#8217;t validate a value filtered by Zend_Filter_LocalizedToNormalized</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7597"> [ZF-7597]</a>: Reference guide minor error</li>
<li><a href="http://framework.zend.com/issues/browse/ZF-7676"> [ZF-7676]</a>: Unit tests stop because of the &laquo;&nbsp;Call to undefined method Zend_XmlRpc_Server_Fault::getReturnValue()&nbsp;&raquo; fatal error</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/non-classe/zend-framework-nouvelle-release-1-9-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xdebug : l&#039;outil de debug et profiling PHP</title>
		<link>http://www.alexandre-julien.com/php/xdebug-loutil-de-debug-et-profiling-php/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=xdebug-loutil-de-debug-et-profiling-php</link>
		<comments>http://www.alexandre-julien.com/php/xdebug-loutil-de-debug-et-profiling-php/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 12:50:15 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[cachegrid]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[profiling]]></category>
		<category><![CDATA[var_dump]]></category>
		<category><![CDATA[Xdebug]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=656</guid>
		<description><![CDATA[ Comme dans tous les langages PHP possède des outils de debugage et de profilage pour optimiser vos applications.
Il existe bien évidement celui de Zend qui est founit avec PHP, cela dit il existe également Xdebug qui est un excellent outil permettant de se configurer sur Eclipse pour faire du  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/xdebug-logo.png"><img class="alignleft size-full wp-image-657" title="xdebug-logo" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/xdebug-logo.png" alt="xdebug-logo" width="200" height="116" /></a> Comme dans tous les langages PHP possède des outils de debugage et de profilage pour optimiser vos applications.</p>
<p>Il existe bien évidement celui de Zend qui est founit avec PHP, cela dit il existe également Xdebug qui est un excellent outil permettant de se configurer sur Eclipse pour faire du debug, d&#8217;améliorer les var_dump en PHP pour visualiser plus facilement les erreurs et de mettre en cache des données pour visualiser les performances de votre application.</p>
<p>Nous allons voir comment installer et configurer Xdebug dans votre environnement PHP.</p>
<p><span id="more-656"></span></p>
<p>Tout d&#8217;abord, il faut s&#8217;avoir que Xdebug est une extension à PHP (sous forme d&#8217;une DLL sous Windows, et d&#8217;un .so sous linux). Il faut récupérer l&#8217;extension sur le site de Xdebug : <a title="http://www.xdebug.org/" href="http://www.xdebug.org/" target="_blank">http://www.xdebug.org/</a> (vous pouvez essayer les paquets dans les dépôts sous linux c&#8217;est beaucoup plus pratique).</p>
<p>Il faut ensuite copier le fichier dans le répertoire des extensions :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/extension.JPG"><img class="aligncenter size-full wp-image-659" title="extension" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/extension.JPG" alt="extension" width="497" height="442" /></a></p>
<p>Il faut ensuite activer l&#8217;extension dans le php.ini en rajoutant la ligne suivante :</p>
<pre lang="ini">extension=php_xdebug-2.0.4-5.2.8.dll</pre>
<p>Xdebug est enfin installé sur le serveur php, la première chose que l&#8217;on peut remarque c&#8217;est que les var_dump sont beaucoup plus complets et lisibles que précédemment :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/var_dump.png"><img class="aligncenter size-full wp-image-660" title="var_dump" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/var_dump.png" alt="var_dump" width="372" height="283" /></a></p>
<p>Les messages d&#8217;erreurs sont également plus complets :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/var_dump_full.jpg"><img class="aligncenter size-full wp-image-661" title="var_dump_full" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/var_dump_full.jpg" alt="var_dump_full" width="527" height="453" /></a></p>
<p>On peut également utilisé Xdebug pour faire du profiling, c&#8217;est à dire faire un affichage de toutes les fonctions exécutées avec les temps de réponses. Pour cela il faut modifier le fichier php.ini et rajouter le code suivant dans la partie module settings :</p>
<pre lang="ini">[xdebug]
xdebug.profiler_enable=On
; On choisit le répertoire où on stocke le cache
xdebug.profiler_output_dir="c:\traces"
xdebug.profiler_append=On
xdebug.profiler_enable_trigger=On</pre>
<p>Il faudra penser à vider le cache lorsqu&#8217;on veut profiler l&#8217;exécution d&#8217;une page en supprimer le fichier dans le répertoire.</p>
<p>On regarde ensuite le profilage avec un logiciel prévu à cet effet, il s&#8217;agit de WinCacheGrid sous Windows et XCacheGrid sous Linux, et on pourra avoir les résultats sous la forme suivante :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/wincachegrind.JPG"><img class="aligncenter size-medium wp-image-662" title="wincachegrind" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/wincachegrind-300x210.jpg" alt="wincachegrind" width="300" height="210" /></a></p>
<p>Pour une utilisation plus avancée, on peut aussi configurer Xdebug avec le PDT d&#8217;Eclipse pour avoir une vraie fonction de débogage perfectionnée ou sinon il reste aussi la solution ultime Zend Studio mais qui est relativement coûteuse.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/xdebug-loutil-de-debug-et-profiling-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework tutoriel #3 : Couche modèle, interaction avec une base de données avec Zend_Db</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-tutoriel-3-couche-modele-interaction-avec-une-base-de-donnees-avec-zend_db/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-tutoriel-3-couche-modele-interaction-avec-une-base-de-donnees-avec-zend_db</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-tutoriel-3-couche-modele-interaction-avec-une-base-de-donnees-avec-zend_db/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 17:21:35 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[Zend f]]></category>
		<category><![CDATA[Zend_Db]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=633</guid>
		<description><![CDATA[Dans une application, il est impératif de se soucier de la portabilité de son application et de son aptitude à s&#8217;intégrer à plusieurs système de base de données. Pour cela, il faut gérer les transactions avec cette dernière avec un outil indépendant d&#8217;une base de données.
On appelle cela une couche  [...]]]></description>
			<content:encoded><![CDATA[<p>Dans une application, il est impératif de se soucier de la portabilité de son application et de son aptitude à s&#8217;intégrer à plusieurs système de base de données. Pour cela, il faut gérer les transactions avec cette dernière avec un outil indépendant d&#8217;une base de données.</p>
<p>On appelle cela une couche d&#8217;abstraction qui sert intermédiaire entre la base de données et l&#8217;application. Le but est de modéliser le schéma d&#8217;une base de données sous forme de classes et d&#8217;objet pour ne pas travailler avec le langage SQL et les drivers de base de données car il est évident qu&#8217;une application écrite de A à Z avec des mysql_connect() et mysql_query() ne sera pas très robuste et migrera difficilement vers un autre SGBD comme Postgre ou Oracle&#8230;</p>
<p><span id="more-633"></span>Zend_Framework fournit un outil nommé Zend_Db_Table pour gérer à l&#8217;aide d&#8217;un système de DAO (Database Access Object) les transactions avec les bases de données.</p>
<p>Nous allons voir dans un premier temps comment configurer Zend_Framework pour mettre en place ce système :</p>
<p><span style="text-decoration: underline;">Configuration du fichier Application.ini :</span></p>
<pre lang="ini">;database configuration
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "root"
resources.db.params.password = ""
resources.db.params.dbname = "announcements"
resources.db.params.date_format = "YYYY-MM-ddTHH:mm:ss"
resources.db.isDefaultTableAdapter = true</pre>
<p>Il faut spécifier dans le &laquo;&nbsp;Application.ini&nbsp;&raquo; les paramètres pour accéder à votre base de données, il faut y spécifier l&#8217;adresse de la base, le type (pdo_mysql, postgre, sqllite, oci8, mssql, &#8230;), l&#8217;utilisateur avec le mot de passe, le nom de la base de données et le format de date et heure.</p>
<p>Ecrire les classes d&#8217;accès aux données (utilisation de Zend_Db_Table) :</p>
<p>Il nous faut maintenant écrire les classes permettant de modéliser  les tables de la base de données pour cela on va utiliser Zend_Db_Table pour générer une classe permettant d&#8217;accéder à la table &laquo;&nbsp;posts &nbsp;&raquo; de notre application :</p>
<p>On créer tout d&#8217;abord un dossier &laquo;&nbsp;models&nbsp;&raquo; dans notre répertoire /application avec un dossier DbTable dedans.</p>
<p>Nous allons générer un fichier <strong>Post.php :</strong></p>
<p>Tout d&#8217;abord,  on crée une classe dérivée de Zend_Db_Table que l&#8217;on nommera avec la syntaxe suivante : Model_DbTablr_NomDeLaTable en spécifiant le nom extact dans l&#8217;attribut protégé &laquo;&nbsp;name&nbsp;&raquo; :</p>
<p>Ensuite il ne reste plus qu&#8217;à écrire les méthodes qui permet les transactions avec les bases de données, je recommende fortement d&#8217;utiliser une méthode pour chaque transaction plutôt que de les écrire dans le contrôleur, on est dans un design-pattern MVC !</p>
<p>Voici le prototypage de notre classe et l&#8217;implémentation de notre classe :</p>
<pre lang="php">fetchRow('id = '.(int)$id);
		if (!$row)
		{
			// On lance une exception en cas d'erreur
			throw new Exception ("Erreur, l'enregistrement $id n'existe pas !");
		}
		// On retourne le résultat sous forme de tableau
		return $row-&gt;toArray();
	}

	/**
	 * Ajoute un article en base de données
	 * @param $values
	 * @return unknown_type
	 */
	public function addPost ($values)
	{
		// On enregistre les valeurs sous forme de tableau [champs] =&gt; valeur
		$result = $this-&gt;insert($values);
		if (!$result)
		{
			throw new Exception ("Erreur impossible d'enregister");
		}
	}

	/**
	 * Met à jour un article en base de donneés
	 * @param $values
	 * @return unknown_type
	 */
	public function updatePost ($id,$newValues)
	{
		$result = $this-&gt;update($newValues, 'id = '.(int)$id);
		if (!$result)
		{
			throw new Exception ("Erreur impossible de mettre à jour");
		}
	}

	/**
	 * Supprime l'article $id
	 * @param $id
	 * @return unknown_type
	 */
	public function removePost ($id)
	{
		$result = $this-&gt;delete('id = '.$id);
		if (!$result)
		{
			throw new Exception ("Erreur impossible de supprimer");
		}
	}

	/**
	 * Requête avec jointure pour récupérer les 5 premiers
	 * articles avec les données de la table auteur en jointure
	 * et qui ont leur status publié
	 * @return unknown_type
	 */
	public function findPostsWithAuthorsInformations ()
	{
		$db = $this-&gt;getAdapter();

		$select = $db-&gt;select()
					 -&gt;from('post')
					 -&gt;joinInner('author', 'post.author_id = author.id')
					 -&gt;where('status = "published"')
					 -&gt;limit(5);
		$query = $select-&gt;query();
                $result = $query->fetchAll();

		return $result;
	}
}
?&gt;</pre>
<p>Pour appeler cette classe dans le contrôleur rien de plus simple, on instancie un objet &laquo;&nbsp;$model&nbsp;&raquo; et pis on appelle les méthodes que l&#8217;on a implémentée :</p>
<pre lang="php">< ?php
	class PostController extends Zend_Controller_Action
	{
		public function init ()
		{
			// On fait rien
		}

		public function testModelAction ()
		{
			$model = new Model_DbTable_Post();

			// Ajout
			$model->addPost(array('title' => 'test', 'content' => 'ceci est mon premier post', 'status' => 'publised'));

			// Requête
			$this->view->posts = $model->findPostsWithAuthorsInformations();

			// Suppression
			$model->removePost(2);

		}
	}
?></pre>
<p>La prochaine fois nous verrons le fonctionnement des formulaires avec Zend_Form</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-tutoriel-3-couche-modele-interaction-avec-une-base-de-donnees-avec-zend_db/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Doctrine 2.0 : que va apporter la nouvelle version de l&#039;ORM PHP 5</title>
		<link>http://www.alexandre-julien.com/php/doctrine-2-0-que-va-apporter-la-nouvelle-version-de-lorm-php-5/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=doctrine-2-0-que-va-apporter-la-nouvelle-version-de-lorm-php-5</link>
		<comments>http://www.alexandre-julien.com/php/doctrine-2-0-que-va-apporter-la-nouvelle-version-de-lorm-php-5/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 06:57:07 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[DAO]]></category>
		<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=595</guid>
		<description><![CDATA[
Doctrine ORM PHP 5 dors et déjà présent sur le framework Symfony, prépare une nouvelle version majeure du projet : Doctrine 2.0
Cette nouvelle version exclusivement compatible avec PHP 5.3 au minimum s&#8217;avère assez prometteuse et assez ambitieuse.
Petit rappel sur Doctrine : ce projet a été conçu  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/08/logo.jpg"><img class="aligncenter size-full wp-image-597" title="Doctrine" src="http://www.alexandre-julien.com/wp-content/uploads/2009/08/logo.jpg" alt="Doctrine" width="421" height="88" /></a></p>
<p>Doctrine ORM PHP 5 dors et déjà présent sur le framework Symfony, prépare une nouvelle version majeure du projet : Doctrine 2.0</p>
<p>Cette nouvelle version exclusivement compatible avec PHP 5.3 au minimum s&#8217;avère assez prometteuse et assez ambitieuse.</p>
<p>Petit rappel sur Doctrine : ce projet a été conçu tout comme Propel (basé sur Active Record) dans un but de créer un ORM relativement puissant et extrèmement riche en fonctionnalités : tests unitaires automatiser sur les classes relationnelles, schéma des bases en YML, génération de code automatique, système de cache avancé, plugins, gestion des contraintes d&#8217;intégrités avancée, load-balancing, profiler, outils de performances, validations des données en fonction du schéma, &#8230; Bref un véritable équivalent de Hibernate en PHP 5.</p>
<p>Le projet est principalement supporté par Sensio Labs (framework Symfony).</p>
<p><span id="more-595"></span></p>
<p>La prochaine version (Doctrine 2.0) sera basée sur PHP 5.3, elle utilisera les nouveaux drivers de PHP, et promet de véritable amélioration au niveau des performances.</p>
<p>Voici des benchmarks des performances de Doctrine 2.0 par rapport à sa version précédente :</p>
<h3>PHP 5.2.8</h3>
<blockquote>
<table style="height: 68px;" border="0" cellspacing="0" width="237">
<thead>
<tr>
<th>#</th>
<th>Seconds</th>
<th>Memory</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>24</td>
<td>129170.648438 KB</td>
</tr>
<tr>
<td>2</td>
<td>23</td>
<td>129164.078125 KB</td>
</tr>
<tr>
<td>3</td>
<td>23</td>
<td>129176.851562 KB</td>
</tr>
</tbody>
</table>
</blockquote>
<h3>PHP 5.3.0alpha4-dev</h3>
<table border="0" cellspacing="0">
<thead>
<tr>
<th>#</th>
<th>Seconds</th>
<th>Memory</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>21</td>
<td>89858.7421875 KB</td>
</tr>
<tr>
<td>2</td>
<td>20</td>
<td>89864.59765625 KB</td>
</tr>
<tr>
<td>3</td>
<td>21</td>
<td>89867.89453125 KB</td>
</tr>
</tbody>
</table>
<p>D&#8217;autre part, Doctrine deviendra beaucoup moins coûteux en code et sera moins verbeux.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/doctrine-2-0-que-va-apporter-la-nouvelle-version-de-lorm-php-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 5/11 queries in 0.196 seconds using disk: basic
Object Caching 3323/3338 objects using disk: basic

Served from: www.alexandre-julien.com @ 2012-02-14 14:34:12 -->
