<?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>LyRiX Blog &#187; Zend Framework</title>
	<atom:link href="http://blog.lyrixx.info/category/zend/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.lyrixx.info</link>
	<description>Tuto, Zend, Php, Ajax, web 2.0, Flex, Serveur, Ubuntu, Geek : Tout ca sur un blog</description>
	<lastBuildDate>Thu, 29 Jul 2010 13:57:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Comment bien démarrer un projet Zend Framework grâce aux Zend_Tool</title>
		<link>http://blog.lyrixx.info/zend/comment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool/</link>
		<comments>http://blog.lyrixx.info/zend/comment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 15:08:10 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Zend_Tool]]></category>

		<guid isPermaLink="false">http://blog.lyrixx.info/?p=1203</guid>
		<description><![CDATA[Cet article est une mise à jour du tutoriel sur l&#8217;outil Zend_Tool. Donc depuis quelque temps dans le Zend Framework, il y a de nouvelles fonctionnalités. Mais pour bien faire les choses, on va reprendre Zend_Tool depuis le début. Qu&#8217;est-ce que Zend_Tool ? Zend Tool est un outils qui s&#8217;utilise en ligne de commande (depuis [...]]]></description>
			<content:encoded><![CDATA[<p>Cet article est une mise à jour du tutoriel sur <strong>l&#8217;outil Zend_Tool</strong>. Donc depuis quelque temps dans le Zend Framework, il y a de nouvelles fonctionnalités. Mais pour bien faire les choses, on va reprendre Zend_Tool depuis le début.</p>
<h2>Qu&#8217;est-ce que Zend_Tool ?</h2>
<p><strong>Zend Tool est un outils qui s&#8217;utilise en ligne de commande</strong> (depuis une console) et qui <strong>permet de mettre en place la structure de son projet</strong>, d&#8217;ajouter des controllers, actions, vues, modules&#8230; D&#8217;après la roadmap de Zend, cet outils à pour objectif de devenir très puissant.<br />
<span id="more-1203"></span></p>
<h2>Introduction</h2>
<p>Alors il va falloir commencer par <a href="http://framework.zend.com/download/latest" target="_blank">télécharger le Zend Framework</a>. On l&#8217;extrait, chez moi c&#8217;est dans le répertoire : « /home/lyrix/prog/php/Lib/Zend_librairie/ZendFramework-1.10.2/ ». On va donc créer un alias pour nous faciliter la vie.  Si vous avez la chance d&#8217;être sur un système linux (ou mac) une ligne de commande suffit :</p>
<pre class="brush: bash;">alias zf=&quot;/home/lyrix/prog/php/Lib/Zend_librairie/ZendFramework-1.10.2/bin/zf.sh&quot;</pre>
<p>Vous pouvez aussi ajouter cette commande a votre fichier de configuration du bash (~/.bashrc), pour que l&#8217;alias soit toujours actif.<br />
On va ensuite aller dans le dossier où l&#8217;on veut que notre projet soit crée.</p>
<pre class="brush: bash;">cd /home/lyrix/prog/php/2010/</pre>
<p>On nommera ce projet « zftuto ».<br />
Création de projet avec Zend_Tool<br />
on commence par créer notre projet :</p>
<pre class="brush: bash;">zf create project ./zftuto/ zftuto</pre>
<p>./zftuto/ représente le PATH de la racine de l&#8217;application.<br />
zftuto représente le nom de l&#8217;application.<br />
Il faut maintenant se déplacer dans le dossier contenant l&#8217;application.</p>
<pre class="brush: bash;">cd zftuto/</pre>
<h2>Base de donnée</h2>
<p>Zend_Tool peut se connecter à une base de donnée, pour ensuite nous créer les classes métiers représentant les tables de notre bases de données (ORM). On commence par configurer notre application pour qu&#8217;elle se connecte à la BDD. Puis ensuite on génère nos classes :</p>
<pre class="brush: bash;">zf configure db-adapter &quot;adapter=pdo_mysql&amp;username=ecommerce&amp;password=ecommerce&amp;dbname=ecommerce&quot;
zf create db-table.fromdatabase</pre>
<p>Le nom des variables est assez explicite pour que je ne les détail pas.</p>
<h2>Layout</h2>
<p>On peut maintenant activer la gestion d&#8217;un layout depuis zend tool.</p>
<pre class="brush: bash;">zf enable layout</pre>
<h2>Formulaire</h2>
<p>On peut créer un formulaire en ligne de commande :</p>
<pre class="brush: bash;">zf create form UserCU</pre>
<h2>Model</h2>
<p>Pour créer un nouveau model (ou classe métier) :</p>
<pre class="brush: bash;">zf create model TestModel</pre>
<h2>Controller, Action, Vue :</h2>
<p>Et bien sur on peut toujours ajouter un controller (avec la vue associé) ;  une action (avec la vue associé) ; ou seulement une vue</p>
<pre class="brush: bash;">zf create controller Users
zf create action read Users
zf create view read2 Users</pre>
<h2>Module :</h2>
<p>On peut aussi créer des modules :</p>
<pre class="brush: bash;">zf create module Moduletest</pre>
<h2>Aide :</h2>
<p>Pour de l&#8217;aide, vous pouvez directement depuis votre console exécuter la commande suivante :</p>
<pre class="brush: bash;">zf ?</pre>
<h2>Conclusion</h2>
<p>Si on fait attention, le nommage des classes a changé. <strong>Il y a maintenant un namespace « application »</strong>. Ce qui a mon goût est plus propre, et anticipe peut être les changements qu&#8217;il va y avoir avec php 5.3 puis php 6</p>
<p><strong >Articles en rapport : :</strong>
<ul class="similar-posts">
<li><a href="http://blog.lyrixx.info/zend/initialisation-dun-projet-zend/" rel="bookmark" title="13 juillet 2009">Initialisation d&#8217;un projet Zend Framework Avec Zend_Tool</a></li>
<li><a href="http://blog.lyrixx.info/ubuntu/comment-developper-et-tester-son-site-en-local/" rel="bookmark" title="5 mars 2010">Comment développer et tester son site en local</a></li>
<li><a href="http://blog.lyrixx.info/zend-framework/" rel="bookmark" title="19 juin 2009">Zend Framework</a></li>
<li><a href="http://blog.lyrixx.info/zend/gerer-la-navigation-de-son-site-avec-le-zend-framework/" rel="bookmark" title="8 octobre 2009">Comment gérer la navigation de son site avec le Zend Framework</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-comment-faire-une-vue/" rel="bookmark" title="26 juin 2009">Zend : Comment faire une vue</a></li>
</ul>
<p><!-- Similar Posts took 6.528 ms --></p>



Et on peut meme partager l'article:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool%2F&amp;partner=sociable" title="Print"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Comment%20bien%20d%C3%A9marrer%20un%20projet%20Zend%20Framework%20gr%C3%A2ce%20aux%20Zend_Tool%20-%20http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool%2F" title="Twitter"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool%2F&amp;t=Comment%20bien%20d%C3%A9marrer%20un%20projet%20Zend%20Framework%20gr%C3%A2ce%20aux%20Zend_Tool" title="Facebook"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool%2F&amp;title=Comment%20bien%20d%C3%A9marrer%20un%20projet%20Zend%20Framework%20gr%C3%A2ce%20aux%20Zend_Tool&amp;bodytext=Cet%20article%20est%20une%20mise%20%C3%A0%20jour%20du%20tutoriel%20sur%20l%27outil%20Zend_Tool.%20Donc%20depuis%20quelque%20temps%20dans%20le%20Zend%20Framework%2C%20il%20y%20a%20de%20nouvelles%20fonctionnalit%C3%A9s.%20Mais%20pour%20bien%20faire%20les%20choses%2C%20on%20va%20reprendre%20Zend_Tool%20depuis%20le%20d%C3%A9but.%0D%0AQu%27est-ce%20que%20Ze" title="Digg"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool%2F&amp;title=Comment%20bien%20d%C3%A9marrer%20un%20projet%20Zend%20Framework%20gr%C3%A2ce%20aux%20Zend_Tool&amp;notes=Cet%20article%20est%20une%20mise%20%C3%A0%20jour%20du%20tutoriel%20sur%20l%27outil%20Zend_Tool.%20Donc%20depuis%20quelque%20temps%20dans%20le%20Zend%20Framework%2C%20il%20y%20a%20de%20nouvelles%20fonctionnalit%C3%A9s.%20Mais%20pour%20bien%20faire%20les%20choses%2C%20on%20va%20reprendre%20Zend_Tool%20depuis%20le%20d%C3%A9but.%0D%0AQu%27est-ce%20que%20Ze" title="del.icio.us"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool%2F&amp;title=Comment%20bien%20d%C3%A9marrer%20un%20projet%20Zend%20Framework%20gr%C3%A2ce%20aux%20Zend_Tool&amp;annotation=Cet%20article%20est%20une%20mise%20%C3%A0%20jour%20du%20tutoriel%20sur%20l%27outil%20Zend_Tool.%20Donc%20depuis%20quelque%20temps%20dans%20le%20Zend%20Framework%2C%20il%20y%20a%20de%20nouvelles%20fonctionnalit%C3%A9s.%20Mais%20pour%20bien%20faire%20les%20choses%2C%20on%20va%20reprendre%20Zend_Tool%20depuis%20le%20d%C3%A9but.%0D%0AQu%27est-ce%20que%20Ze" title="Google Bookmarks"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.netvibes.com/share?title=Comment%20bien%20d%C3%A9marrer%20un%20projet%20Zend%20Framework%20gr%C3%A2ce%20aux%20Zend_Tool&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool%2F" title="Netvibes"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/netvibes.png" title="Netvibes" alt="Netvibes" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.blogospherenews.com/submit.php?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool%2F&amp;title=Comment%20bien%20d%C3%A9marrer%20un%20projet%20Zend%20Framework%20gr%C3%A2ce%20aux%20Zend_Tool" title="Blogosphere News"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/blogospherenews.png" title="Blogosphere News" alt="Blogosphere News" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool%2F" title="Identi.ca"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool%2F&amp;title=Comment%20bien%20d%C3%A9marrer%20un%20projet%20Zend%20Framework%20gr%C3%A2ce%20aux%20Zend_Tool&amp;source=LyRiX+Blog+Tuto%2C+Zend%2C+Php%2C+Ajax%2C+web+2.0%2C+Flex%2C+Serveur%2C+Ubuntu%2C+Geek+%3A+Tout+ca+sur+un+blog&amp;summary=Cet%20article%20est%20une%20mise%20%C3%A0%20jour%20du%20tutoriel%20sur%20l%27outil%20Zend_Tool.%20Donc%20depuis%20quelque%20temps%20dans%20le%20Zend%20Framework%2C%20il%20y%20a%20de%20nouvelles%20fonctionnalit%C3%A9s.%20Mais%20pour%20bien%20faire%20les%20choses%2C%20on%20va%20reprendre%20Zend_Tool%20depuis%20le%20d%C3%A9but.%0D%0AQu%27est-ce%20que%20Ze" title="LinkedIn"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool%2F" title="Technorati"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.wikio.fr/vote?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool%2F" title="Wikio FR"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/wikio.png" title="Wikio FR" alt="Wikio FR" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool%2F&amp;submitHeadline=Comment%20bien%20d%C3%A9marrer%20un%20projet%20Zend%20Framework%20gr%C3%A2ce%20aux%20Zend_Tool&amp;submitSummary=Cet%20article%20est%20une%20mise%20%C3%A0%20jour%20du%20tutoriel%20sur%20l%27outil%20Zend_Tool.%20Donc%20depuis%20quelque%20temps%20dans%20le%20Zend%20Framework%2C%20il%20y%20a%20de%20nouvelles%20fonctionnalit%C3%A9s.%20Mais%20pour%20bien%20faire%20les%20choses%2C%20on%20va%20reprendre%20Zend_Tool%20depuis%20le%20d%C3%A9but.%0D%0AQu%27est-ce%20que%20Ze&amp;submitCategory=science&amp;submitAssetType=text" title="Yahoo! Buzz"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/yahoobuzz.png" title="Yahoo! Buzz" alt="Yahoo! Buzz" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://ping.fm/ref/?link=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool%2F&amp;title=Comment%20bien%20d%C3%A9marrer%20un%20projet%20Zend%20Framework%20gr%C3%A2ce%20aux%20Zend_Tool&amp;body=Cet%20article%20est%20une%20mise%20%C3%A0%20jour%20du%20tutoriel%20sur%20l%27outil%20Zend_Tool.%20Donc%20depuis%20quelque%20temps%20dans%20le%20Zend%20Framework%2C%20il%20y%20a%20de%20nouvelles%20fonctionnalit%C3%A9s.%20Mais%20pour%20bien%20faire%20les%20choses%2C%20on%20va%20reprendre%20Zend_Tool%20depuis%20le%20d%C3%A9but.%0D%0AQu%27est-ce%20que%20Ze" title="Ping.fm"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/ping.png" title="Ping.fm" alt="Ping.fm" class="sociable-hovers" /></a>


<br/><br/><br /><hr />
<p><small>Auteur : © Greg pour <a href="http://blog.lyrixx.info">LyRiX Blog</a>.
<br /><a href="http://blog.lyrixx.info/zend/comment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool/">Article</a> publié le :  18-03-2010, dans : <a href="http://blog.lyrixx.info/category/zend/" title="Voir tous les articles dans Zend Framework" rel="category tag">Zend Framework</a>.
<a href="http://blog.lyrixx.info/zend/comment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool/">Liens direct vers l'article (permalink) </a>
<br/>Mot Clé : <a href="http://blog.lyrixx.info/tag/architecture/" rel="tag">Architecture</a>, <a href="http://blog.lyrixx.info/tag/zend-framework/" rel="tag">Zend Framework</a>, <a href="http://blog.lyrixx.info/tag/zend_tool/" rel="tag">Zend_Tool</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.lyrixx.info/zend/comment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Architecture du Zend Framework 1.10 en MVC</title>
		<link>http://blog.lyrixx.info/zend/architecture-du-zend-framework-1-10/</link>
		<comments>http://blog.lyrixx.info/zend/architecture-du-zend-framework-1-10/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 14:38:23 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Architecture]]></category>

		<guid isPermaLink="false">http://blog.lyrixx.info/?p=1187</guid>
		<description><![CDATA[Depuis quelques versions du Zend Framework, l&#8217;architecture de celui-ci en mode MVC à un petit peu changé. Je vous donne le nouveau schémas, et je l&#8217;explique ensuite. La racine des dossiers est (chez moi) le dossier « zftuto ». Je précise que cette structure a été obtenu grâce aux Zend_Tool (cf prochain tutoriel). Dans ce dossier nous [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis quelques versions du <strong>Zend Framework</strong>, l&#8217;architecture de celui-ci en mode MVC à un petit peu changé. Je vous donne le nouveau schémas, et je l&#8217;explique ensuite. La racine des dossiers est (chez moi) le dossier « zftuto ». Je précise que <strong>cette structure a été obtenu grâce aux Zend_Tool</strong> (cf prochain tutoriel).</p>
<p><span id="more-1187"></span></p>
<p><a href="http://blog.lyrixx.info/wp-content/uploads/2010/03/architecture.png" rel="lightbox[1187]"><img class="alignright size-full wp-image-1188" title="architecture" src="http://blog.lyrixx.info/wp-content/uploads/2010/03/architecture.png" alt="" width="260" height="592" /></a></p>
<p>Dans ce dossier nous avons :</p>
<ul>
<li><strong>application</strong> : c&#8217;est le dossier où tous notre code va se situer, il ne doit pas être accessible depuis l&#8217;extérieur.
<ul>
<li><strong>configs</strong> : c&#8217;est le dossier qui va contenir tous nos fichiers de configuration
<ul>
<li><strong>application.ini</strong> : C&#8217;est le fichier qui permet de définir les réglage de l&#8217;application comme les paramètre de base de données, les chemins par défaut …</li>
</ul>
</li>
<li><strong>controllers</strong> : c&#8217;est le dossier qui va contenir tous les controllers</li>
<li><strong>forms</strong> : c&#8217;est un nouveau dossier qui contient maintenant tous les formulaires</li>
<li><strong>layouts</strong>/<strong>scripts</strong>/ : c&#8217;est le dossier qui contient les fichiers de layout
<ul>
<li><strong>layout.phtml</strong> : layout (ou template) de base de notre application</li>
</ul>
</li>
<li><strong>models</strong> : c&#8217;est le dossier qui contient tous les modèles, ou plus exactement tous notre code métier
<ul>
<li><strong>DbTable</strong> : c&#8217;est le dossier qui contient toutes les représentation de nos tables (ORM).</li>
</ul>
</li>
<li><strong>Views</strong> : c&#8217;est le dossier qui contient tous ce qui touchent a l&#8217;affichage
<ul>
<li><strong>helpers</strong> : c&#8217;est le dossier qui contient les aides de vues</li>
<li><strong>scripts</strong> : c&#8217;est le dossier qui contient les dossiers contenant les vues</li>
</ul>
</li>
</ul>
</li>
<li><strong>docs</strong> : c&#8217;est le dossier qui contient la documentation (oui il en faut)</li>
<li><strong>library</strong> : c&#8217;est le dossier qui contient les librairies</li>
<li><strong>zend</strong> : c&#8217;est dans ce dossier qu&#8217;il faut mettre la librairie du Zend Framework</li>
<li><strong>public</strong> : c&#8217;est le seul dossier qui doit être accessible depuis l&#8217;extérieur.
<ul>
<li><strong>index.php</strong> : c&#8217;est le fichier qui va démarrer notre application</li>
</ul>
</li>
<li><strong>tests</strong> : c&#8217;est le dossier qui contient tous les fichiers pour faire des tests unitaires.</li>
</ul>
<p><strong >Articles en rapport : :</strong>
<ul class="similar-posts">
<li><a href="http://blog.lyrixx.info/zend/architecture-de-zend-framework-1-8-en-mvc/" rel="bookmark" title="13 juillet 2009">Architecture de Zend Framework 1.8 en MVC</a></li>
<li><a href="http://blog.lyrixx.info/zend/architecture-de-zend-framework-en-mcv/" rel="bookmark" title="17 juin 2009">Architecture de Zend Framework en MCV</a></li>
<li><a href="http://blog.lyrixx.info/zend/comment-mettre-en-place-un-layout-avec-le-zend-framework-1-8/" rel="bookmark" title="23 juillet 2009">Comment mettre en place un Layout avec le Zend-Framework 1.8</a></li>
<li><a href="http://blog.lyrixx.info/zend/css-javascript-et-zend-framework/" rel="bookmark" title="17 juin 2009">Css, JavaScript et Zend Framework</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-comment-faire-une-vue/" rel="bookmark" title="26 juin 2009">Zend : Comment faire une vue</a></li>
</ul>
<p><!-- Similar Posts took 6.582 ms --></p>



Et on peut meme partager l'article:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Farchitecture-du-zend-framework-1-10%2F&amp;partner=sociable" title="Print"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Architecture%20du%20Zend%20Framework%201.10%20en%20MVC%20-%20http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Farchitecture-du-zend-framework-1-10%2F" title="Twitter"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Farchitecture-du-zend-framework-1-10%2F&amp;t=Architecture%20du%20Zend%20Framework%201.10%20en%20MVC" title="Facebook"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Farchitecture-du-zend-framework-1-10%2F&amp;title=Architecture%20du%20Zend%20Framework%201.10%20en%20MVC&amp;bodytext=Depuis%20quelques%20versions%20du%20Zend%20Framework%2C%20l%27architecture%20de%20celui-ci%20en%20mode%20MVC%20%C3%A0%20un%20petit%20peu%20chang%C3%A9.%20Je%20vous%20donne%20le%20nouveau%20sch%C3%A9mas%2C%20et%20je%20l%27explique%20ensuite.%20La%20racine%20des%20dossiers%20est%20%28chez%20moi%29%20le%20dossier%20%C2%AB%C2%A0zftuto%C2%A0%C2%BB.%20Je%20pr%C3%A9cise%20que%20" title="Digg"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Farchitecture-du-zend-framework-1-10%2F&amp;title=Architecture%20du%20Zend%20Framework%201.10%20en%20MVC&amp;notes=Depuis%20quelques%20versions%20du%20Zend%20Framework%2C%20l%27architecture%20de%20celui-ci%20en%20mode%20MVC%20%C3%A0%20un%20petit%20peu%20chang%C3%A9.%20Je%20vous%20donne%20le%20nouveau%20sch%C3%A9mas%2C%20et%20je%20l%27explique%20ensuite.%20La%20racine%20des%20dossiers%20est%20%28chez%20moi%29%20le%20dossier%20%C2%AB%C2%A0zftuto%C2%A0%C2%BB.%20Je%20pr%C3%A9cise%20que%20" title="del.icio.us"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Farchitecture-du-zend-framework-1-10%2F&amp;title=Architecture%20du%20Zend%20Framework%201.10%20en%20MVC&amp;annotation=Depuis%20quelques%20versions%20du%20Zend%20Framework%2C%20l%27architecture%20de%20celui-ci%20en%20mode%20MVC%20%C3%A0%20un%20petit%20peu%20chang%C3%A9.%20Je%20vous%20donne%20le%20nouveau%20sch%C3%A9mas%2C%20et%20je%20l%27explique%20ensuite.%20La%20racine%20des%20dossiers%20est%20%28chez%20moi%29%20le%20dossier%20%C2%AB%C2%A0zftuto%C2%A0%C2%BB.%20Je%20pr%C3%A9cise%20que%20" title="Google Bookmarks"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.netvibes.com/share?title=Architecture%20du%20Zend%20Framework%201.10%20en%20MVC&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Farchitecture-du-zend-framework-1-10%2F" title="Netvibes"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/netvibes.png" title="Netvibes" alt="Netvibes" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.blogospherenews.com/submit.php?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Farchitecture-du-zend-framework-1-10%2F&amp;title=Architecture%20du%20Zend%20Framework%201.10%20en%20MVC" title="Blogosphere News"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/blogospherenews.png" title="Blogosphere News" alt="Blogosphere News" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Farchitecture-du-zend-framework-1-10%2F" title="Identi.ca"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Farchitecture-du-zend-framework-1-10%2F&amp;title=Architecture%20du%20Zend%20Framework%201.10%20en%20MVC&amp;source=LyRiX+Blog+Tuto%2C+Zend%2C+Php%2C+Ajax%2C+web+2.0%2C+Flex%2C+Serveur%2C+Ubuntu%2C+Geek+%3A+Tout+ca+sur+un+blog&amp;summary=Depuis%20quelques%20versions%20du%20Zend%20Framework%2C%20l%27architecture%20de%20celui-ci%20en%20mode%20MVC%20%C3%A0%20un%20petit%20peu%20chang%C3%A9.%20Je%20vous%20donne%20le%20nouveau%20sch%C3%A9mas%2C%20et%20je%20l%27explique%20ensuite.%20La%20racine%20des%20dossiers%20est%20%28chez%20moi%29%20le%20dossier%20%C2%AB%C2%A0zftuto%C2%A0%C2%BB.%20Je%20pr%C3%A9cise%20que%20" title="LinkedIn"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Farchitecture-du-zend-framework-1-10%2F" title="Technorati"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.wikio.fr/vote?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Farchitecture-du-zend-framework-1-10%2F" title="Wikio FR"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/wikio.png" title="Wikio FR" alt="Wikio FR" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Farchitecture-du-zend-framework-1-10%2F&amp;submitHeadline=Architecture%20du%20Zend%20Framework%201.10%20en%20MVC&amp;submitSummary=Depuis%20quelques%20versions%20du%20Zend%20Framework%2C%20l%27architecture%20de%20celui-ci%20en%20mode%20MVC%20%C3%A0%20un%20petit%20peu%20chang%C3%A9.%20Je%20vous%20donne%20le%20nouveau%20sch%C3%A9mas%2C%20et%20je%20l%27explique%20ensuite.%20La%20racine%20des%20dossiers%20est%20%28chez%20moi%29%20le%20dossier%20%C2%AB%C2%A0zftuto%C2%A0%C2%BB.%20Je%20pr%C3%A9cise%20que%20&amp;submitCategory=science&amp;submitAssetType=text" title="Yahoo! Buzz"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/yahoobuzz.png" title="Yahoo! Buzz" alt="Yahoo! Buzz" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://ping.fm/ref/?link=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Farchitecture-du-zend-framework-1-10%2F&amp;title=Architecture%20du%20Zend%20Framework%201.10%20en%20MVC&amp;body=Depuis%20quelques%20versions%20du%20Zend%20Framework%2C%20l%27architecture%20de%20celui-ci%20en%20mode%20MVC%20%C3%A0%20un%20petit%20peu%20chang%C3%A9.%20Je%20vous%20donne%20le%20nouveau%20sch%C3%A9mas%2C%20et%20je%20l%27explique%20ensuite.%20La%20racine%20des%20dossiers%20est%20%28chez%20moi%29%20le%20dossier%20%C2%AB%C2%A0zftuto%C2%A0%C2%BB.%20Je%20pr%C3%A9cise%20que%20" title="Ping.fm"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/ping.png" title="Ping.fm" alt="Ping.fm" class="sociable-hovers" /></a>


<br/><br/><br /><hr />
<p><small>Auteur : © Greg pour <a href="http://blog.lyrixx.info">LyRiX Blog</a>.
<br /><a href="http://blog.lyrixx.info/zend/architecture-du-zend-framework-1-10/">Article</a> publié le :  18-03-2010, dans : <a href="http://blog.lyrixx.info/category/zend/" title="Voir tous les articles dans Zend Framework" rel="category tag">Zend Framework</a>.
<a href="http://blog.lyrixx.info/zend/architecture-du-zend-framework-1-10/">Liens direct vers l'article (permalink) </a>
<br/>Mot Clé : <a href="http://blog.lyrixx.info/tag/architecture/" rel="tag">Architecture</a>, <a href="http://blog.lyrixx.info/tag/zend-framework/" rel="tag">Zend Framework</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.lyrixx.info/zend/architecture-du-zend-framework-1-10/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Application de site E-Commerce [Code-Source]</title>
		<link>http://blog.lyrixx.info/zend/application-de-site-e-commerce/</link>
		<comments>http://blog.lyrixx.info/zend/application-de-site-e-commerce/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 14:11:35 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Code Source]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[Php]]></category>

		<guid isPermaLink="false">http://blog.lyrixx.info/?p=1175</guid>
		<description><![CDATA[Comme vous l&#8217;avez peut être vu passer sur twitter, j&#8217;ai du faire pour les cours une application e-commerce très basique. J&#8217;ai choisis de la faire avec Zend. Et du coup je partage le code ici . Cette application est très simplifié : il n&#8217;y a qu&#8217;une page produit, avec la possibilité d&#8217;ajouter des produits dans [...]]]></description>
			<content:encoded><![CDATA[<p>Comme vous l&#8217;avez peut être vu passer sur <a href="http://twitter.com/lyrixx" target="_blank">twitter</a>, j&#8217;ai du faire pour les cours une <strong>application e-commerce très basique</strong>. J&#8217;ai choisis de la faire avec Zend. Et du coup je partage le code ici <img src='http://blog.lyrixx.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . <strong>Cette application est très simplifié : il n&#8217;y a qu&#8217;une page produit, avec la possibilité d&#8217;ajouter des produits dans un panier et ensuite de gérer son panier. Il y a aussi la toute la partie gestion des utilisateurs : connexion, enregistrement, déconnexion</strong> etc&#8230; Et enfin il y a une page paiement qui vérifie les informations de la carte bancaire.</p>
<p><span id="more-1175"></span></p>
<p>Quelques points techniques abordés dans cette application :</p>
<ul>
<li><strong>Bootstrap</strong> (Zend_Application)</li>
<li><strong>Controller</strong>, <strong>View</strong>, <strong>Model</strong> (MVC)</li>
<li>Mapping <strong>de base de données</strong> (ORM) (Zend_Db_Table)</li>
<li><strong>Formulaires</strong>, <strong>Validations</strong>, <strong>Décorateurs</strong> (Zend_Form, Zend_Validate)</li>
<li><strong>Layout</strong> et <strong>Aides de vue</strong> (Zend_View_Helper)</li>
<li><strong>Authentification</strong> (Zend_Auth)</li>
<li><strong>Session</strong> (Zend_Session)</li>
<li><strong>Cookie</strong></li>
<li>Zend_Text_Figlet (Bonus ca <img src='http://blog.lyrixx.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</li>
</ul>
<p>voila quelques screenshots :</p>
<p><a href="http://blog.lyrixx.info/wp-content/uploads/2010/03/TP1-Ecommerce-prod.png" rel="lightbox[1175]"><img class="alignnone size-medium wp-image-1176" title="TP1-Ecommerce prod" src="http://blog.lyrixx.info/wp-content/uploads/2010/03/TP1-Ecommerce-prod-300x168.png" alt="" width="300" height="168" /></a> <a href="http://blog.lyrixx.info/wp-content/uploads/2010/03/TP1-Ecommerce-register.png" rel="lightbox[1175]"><img class="alignnone size-medium wp-image-1177" title="TP1-Ecommerce register" src="http://blog.lyrixx.info/wp-content/uploads/2010/03/TP1-Ecommerce-register-300x168.png" alt="" width="300" height="168" /></a><a href="http://blog.lyrixx.info/wp-content/uploads/2010/03/TP1-Ecommerce-panier.png" rel="lightbox[1175]"><img class="alignnone size-medium wp-image-1178" title="TP1-Ecommerce panier" src="http://blog.lyrixx.info/wp-content/uploads/2010/03/TP1-Ecommerce-panier-300x153.png" alt="" width="300" height="153" /></a><a href="http://blog.lyrixx.info/wp-content/uploads/2010/03/TP1-Ecommerce-paiment.png" rel="lightbox[1175]"><img class="alignnone size-medium wp-image-1179" title="TP1-Ecommerce paiment" src="http://blog.lyrixx.info/wp-content/uploads/2010/03/TP1-Ecommerce-paiment-300x165.png" alt="" width="300" height="165" /></a></p>
<p>Et enfin <a href="http://blog.lyrixx.info/wp-content/uploads/2010/03/TP1-Ecommerce.tar.gz">les sources à télécharger</a></p>
<p><strong >Articles en rapport : :</strong>
<ul class="similar-posts">
<li><a href="http://blog.lyrixx.info/zend/gerer-lauthentification-avec-zend_auth-du-zend-framework/" rel="bookmark" title="23 décembre 2009">Gerer l&#8217;authentification avec Zend_Auth du Zend Framework</a></li>
<li><a href="http://blog.lyrixx.info/zend-framework/" rel="bookmark" title="19 juin 2009">Zend Framework</a></li>
<li><a href="http://blog.lyrixx.info/zend/css-javascript-et-zend-framework/" rel="bookmark" title="17 juin 2009">Css, JavaScript et Zend Framework</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-2/" rel="bookmark" title="20 novembre 2009">Zend Framework, Formulaire et Base de donnée, partie 2</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/" rel="bookmark" title="19 novembre 2009">Zend Framework, Formulaire et Base de donnée, partie 1</a></li>
</ul>
<p><!-- Similar Posts took 6.676 ms --></p>



Et on peut meme partager l'article:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fapplication-de-site-e-commerce%2F&amp;partner=sociable" title="Print"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Application%20de%20site%20E-Commerce%20%5BCode-Source%5D%20-%20http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fapplication-de-site-e-commerce%2F" title="Twitter"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fapplication-de-site-e-commerce%2F&amp;t=Application%20de%20site%20E-Commerce%20%5BCode-Source%5D" title="Facebook"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fapplication-de-site-e-commerce%2F&amp;title=Application%20de%20site%20E-Commerce%20%5BCode-Source%5D&amp;bodytext=Comme%20vous%20l%27avez%20peut%20%C3%AAtre%20vu%20passer%20sur%20twitter%2C%20j%27ai%20du%20faire%20pour%20les%20cours%20une%20application%20e-commerce%20tr%C3%A8s%20basique.%20J%27ai%20choisis%20de%20la%20faire%20avec%20Zend.%20Et%20du%20coup%20je%20partage%20le%20code%20ici%20%3B%29.%20Cette%20application%20est%20tr%C3%A8s%20simplifi%C3%A9%20%3A%20il%20n%27y%20a%20qu%27" title="Digg"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fapplication-de-site-e-commerce%2F&amp;title=Application%20de%20site%20E-Commerce%20%5BCode-Source%5D&amp;notes=Comme%20vous%20l%27avez%20peut%20%C3%AAtre%20vu%20passer%20sur%20twitter%2C%20j%27ai%20du%20faire%20pour%20les%20cours%20une%20application%20e-commerce%20tr%C3%A8s%20basique.%20J%27ai%20choisis%20de%20la%20faire%20avec%20Zend.%20Et%20du%20coup%20je%20partage%20le%20code%20ici%20%3B%29.%20Cette%20application%20est%20tr%C3%A8s%20simplifi%C3%A9%20%3A%20il%20n%27y%20a%20qu%27" title="del.icio.us"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fapplication-de-site-e-commerce%2F&amp;title=Application%20de%20site%20E-Commerce%20%5BCode-Source%5D&amp;annotation=Comme%20vous%20l%27avez%20peut%20%C3%AAtre%20vu%20passer%20sur%20twitter%2C%20j%27ai%20du%20faire%20pour%20les%20cours%20une%20application%20e-commerce%20tr%C3%A8s%20basique.%20J%27ai%20choisis%20de%20la%20faire%20avec%20Zend.%20Et%20du%20coup%20je%20partage%20le%20code%20ici%20%3B%29.%20Cette%20application%20est%20tr%C3%A8s%20simplifi%C3%A9%20%3A%20il%20n%27y%20a%20qu%27" title="Google Bookmarks"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.netvibes.com/share?title=Application%20de%20site%20E-Commerce%20%5BCode-Source%5D&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fapplication-de-site-e-commerce%2F" title="Netvibes"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/netvibes.png" title="Netvibes" alt="Netvibes" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.blogospherenews.com/submit.php?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fapplication-de-site-e-commerce%2F&amp;title=Application%20de%20site%20E-Commerce%20%5BCode-Source%5D" title="Blogosphere News"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/blogospherenews.png" title="Blogosphere News" alt="Blogosphere News" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fapplication-de-site-e-commerce%2F" title="Identi.ca"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fapplication-de-site-e-commerce%2F&amp;title=Application%20de%20site%20E-Commerce%20%5BCode-Source%5D&amp;source=LyRiX+Blog+Tuto%2C+Zend%2C+Php%2C+Ajax%2C+web+2.0%2C+Flex%2C+Serveur%2C+Ubuntu%2C+Geek+%3A+Tout+ca+sur+un+blog&amp;summary=Comme%20vous%20l%27avez%20peut%20%C3%AAtre%20vu%20passer%20sur%20twitter%2C%20j%27ai%20du%20faire%20pour%20les%20cours%20une%20application%20e-commerce%20tr%C3%A8s%20basique.%20J%27ai%20choisis%20de%20la%20faire%20avec%20Zend.%20Et%20du%20coup%20je%20partage%20le%20code%20ici%20%3B%29.%20Cette%20application%20est%20tr%C3%A8s%20simplifi%C3%A9%20%3A%20il%20n%27y%20a%20qu%27" title="LinkedIn"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fapplication-de-site-e-commerce%2F" title="Technorati"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.wikio.fr/vote?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fapplication-de-site-e-commerce%2F" title="Wikio FR"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/wikio.png" title="Wikio FR" alt="Wikio FR" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fapplication-de-site-e-commerce%2F&amp;submitHeadline=Application%20de%20site%20E-Commerce%20%5BCode-Source%5D&amp;submitSummary=Comme%20vous%20l%27avez%20peut%20%C3%AAtre%20vu%20passer%20sur%20twitter%2C%20j%27ai%20du%20faire%20pour%20les%20cours%20une%20application%20e-commerce%20tr%C3%A8s%20basique.%20J%27ai%20choisis%20de%20la%20faire%20avec%20Zend.%20Et%20du%20coup%20je%20partage%20le%20code%20ici%20%3B%29.%20Cette%20application%20est%20tr%C3%A8s%20simplifi%C3%A9%20%3A%20il%20n%27y%20a%20qu%27&amp;submitCategory=science&amp;submitAssetType=text" title="Yahoo! Buzz"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/yahoobuzz.png" title="Yahoo! Buzz" alt="Yahoo! Buzz" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://ping.fm/ref/?link=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fapplication-de-site-e-commerce%2F&amp;title=Application%20de%20site%20E-Commerce%20%5BCode-Source%5D&amp;body=Comme%20vous%20l%27avez%20peut%20%C3%AAtre%20vu%20passer%20sur%20twitter%2C%20j%27ai%20du%20faire%20pour%20les%20cours%20une%20application%20e-commerce%20tr%C3%A8s%20basique.%20J%27ai%20choisis%20de%20la%20faire%20avec%20Zend.%20Et%20du%20coup%20je%20partage%20le%20code%20ici%20%3B%29.%20Cette%20application%20est%20tr%C3%A8s%20simplifi%C3%A9%20%3A%20il%20n%27y%20a%20qu%27" title="Ping.fm"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/ping.png" title="Ping.fm" alt="Ping.fm" class="sociable-hovers" /></a>


<br/><br/><br /><hr />
<p><small>Auteur : © Greg pour <a href="http://blog.lyrixx.info">LyRiX Blog</a>.
<br /><a href="http://blog.lyrixx.info/zend/application-de-site-e-commerce/">Article</a> publié le :  18-03-2010, dans : <a href="http://blog.lyrixx.info/category/zend/" title="Voir tous les articles dans Zend Framework" rel="category tag">Zend Framework</a>.
<a href="http://blog.lyrixx.info/zend/application-de-site-e-commerce/">Liens direct vers l'article (permalink) </a>
<br/>Mot Clé : <a href="http://blog.lyrixx.info/tag/application/" rel="tag">Application</a>, <a href="http://blog.lyrixx.info/tag/code-source/" rel="tag">Code Source</a>, <a href="http://blog.lyrixx.info/tag/mysql/" rel="tag">Mysql</a>, <a href="http://blog.lyrixx.info/tag/php/" rel="tag">Php</a>, <a href="http://blog.lyrixx.info/tag/zend-framework/" rel="tag">Zend Framework</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.lyrixx.info/zend/application-de-site-e-commerce/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Gerer l&#8217;authentification avec Zend_Auth du Zend Framework</title>
		<link>http://blog.lyrixx.info/zend/gerer-lauthentification-avec-zend_auth-du-zend-framework/</link>
		<comments>http://blog.lyrixx.info/zend/gerer-lauthentification-avec-zend_auth-du-zend-framework/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 07:00:37 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Layout]]></category>
		<category><![CDATA[View]]></category>
		<category><![CDATA[Zend_Auth]]></category>
		<category><![CDATA[Zend_Db]]></category>
		<category><![CDATA[Zend_View_Helper]]></category>

		<guid isPermaLink="false">http://blog.lyrixx.info/?p=1039</guid>
		<description><![CDATA[Comment faire un système de login sur son application ? On va voir comment mettre en place un système de connexion d&#8217;utilisateur dans son application avec le Zend Framework. Pour ce faire on va utiliser le composant Zend_Auth. Il va falloir commencer par faire le formulaire de login qui n&#8217;est pas très compliqué. Faire la [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.lyrixx.info/wp-content/uploads/2009/12/login.png" rel="lightbox[1039]"><img class="aligncenter size-full wp-image-1094" title="login" src="http://blog.lyrixx.info/wp-content/uploads/2009/12/login.png" alt="" width="675" height="148" /></a><br />
<strong>Comment faire un système de login sur son application</strong> ? On va voir comment mettre en place un système de connexion d&#8217;utilisateur dans son application avec le <strong>Zend Framework</strong>. Pour ce faire on va utiliser le composant <strong>Zend_Auth</strong>. Il va falloir commencer par faire le <strong>formulaire de login</strong> qui n&#8217;est pas très compliqué. Faire la validation de ce formulaire puis si il est valide s&#8217;occuper de la partie <strong>Zend_Auth ou authentification</strong>. Enfin nous verrons comment faire un petit <strong>Zend_View_Helper</strong> (aide de vue) pour créer automatiquement des liens (<strong>« login» ou  « logout »</strong>)</p>
<p><span id="more-1039"></span></p>
<h2 id="sommaire">Sommaire :</h2>
<ul>
<li><a href="#sommaire">Sommaire</a></li>
<li><a href="#formulaire">Mise en place du formulaire</a></li>
<li><a href="#controller">Le controller</a></li>
<li><a href="#deconnexion">Déconnexion</a></li>
<li><a href="#verif">Vérification</a></li>
<li><a href="#zend-view-helper">Le controller de vue</a></li>
</ul>
<h2 id="formulaire">Création du formulaire de login :</h2>
<p>On va allé assez vite sur la création du formulaire dans la mesure ou j&#8217;explique dans un autre tutoriel <a title="Zend Framework, Formulaire et Base de donnée, partie 1" href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/#formulaire"><strong>comment faire un formulaire</strong></a>.</p>
<pre class="brush: php;">class Model_Form_User_Login extends Zend_Form  {

	public function init(){
		$this-&gt;setName('add_user');

		$email = new Model_Form_EText('email','Adresse Email : ');

		$password = new Zend_Form_Element_Password('password');
		$password-&gt;setLabel('Mot de pase : ')
			-&gt;setRequired(true)
			-&gt;addFilter('StripTags')
			-&gt;addFilter('StringTrim');

		$submit = new Zend_Form_Element_Submit('submit');
		$submit-&gt;setAttrib('id', 'submitbutton')
			-&gt;setLabel('Se connecter');

		$elements = array($email,$password, $submit);
		$this-&gt;addElements($elements);

		$this-&gt;setDecorators(array(
			'FormElements',
			array('HtmlTag', array('tag' =&gt; 'dl', 'class' =&gt; 'zend_form')),
			array('Errors', array('placement' =&gt; 'apend')),
			'Form'
		));
	}

}</pre>
<p>On voit qu&#8217;on utilise un champ <em>email</em> et un champ <em>password</em> et bien sur un bouton valider. Si la classe de l&#8217;email vous parait bizarre je vous conseil de lire le tutoriel sur les formulaires. Enfin les dernières lignes concernent la mise en forme du formulaire ainsi que la position des messages d&#8217;erreurs qui seront envoyés (ajoutés) par <strong>le modèle pour la vérification du couple Email / Password</strong>.</p>
<h2 id="controller">Le controller</h2>
<p>Le <em>controller</em> est dans la classe <em>LoginController</em> et l&#8217;action que nous allons utiliser est <em>loginAction</em>. On commence par donner une instance de notre formulaire à la vue pour qu&#8217;elle puisse l&#8217;afficher.</p>
<pre class="brush: php;">$form = new Model_Form_User_Login();
$this-&gt;view-&gt;formLogin = $form;</pre>
<p>Ensuite on vérifie qu&#8217;il y ai des données postées, on les récupère et on les valide.</p>
<pre class="brush: php;">if ($this-&gt;_request-&gt;isPost ()) {
	$formData = $this-&gt;_request-&gt;getPost ();
	if ($form-&gt;isValid ( $formData )) {</pre>
<p>Si elles sont valides, on récupère les données :</p>
<pre class="brush: php;">$email = $form-&gt;getValue ( 'email' );
$password = $form-&gt;getValue ( 'password' );</pre>
<p>Enfin on arrive à la <strong>partie qui concerne Zend_Auth</strong>. Il faut commencer par créer ce qu&#8217;on appel un <em>Zend_Auth_Adapter_DbTable</em>, c&#8217;est un composant de <em>Zend_Auth</em> qui va pouvoir se connecter à la <em>BDD</em>. Cet nouvel objet va prendre en paramètre un <em>Zend_Db_Adapter_Abstract</em>, c&#8217;est à dire un connecteur à la base de donnée. Dans notre cas nous allons prendre le connecteur principal, celui qui est définit dans les paramètres globaux de Zend (application.ini)</p>
<pre class="brush: php;">$authAdapter = new Zend_Auth_Adapter_DbTable ( Zend_Db_Table::getDefaultAdapter () );</pre>
<p>Enfin il faut donner quelques informations à cet adaptateur :</p>
<ul>
<li>Le nom de la table qui contient les utilisateurs (ici users)</li>
<li>Le nom de la colonne qui contient les identifiants (ici email)</li>
<li>Le nom de la colonne qui contient les mots de passe (ici password)</li>
<li>Le type de hashage dans la base (ici MD5)</li>
<li>La valeur de l&#8217;email</li>
<li>La valeur du mot de passe</li>
</ul>
<pre class="brush: php;">$authAdapter-&gt;setTableName ( 'users' )
	-&gt;setIdentityColumn ( 'email' )
	-&gt;setCredentialColumn ( 'password' )
	-&gt;setCredentialTreatment ( 'MD5(?)' )
	-&gt;setIdentity ( $email )
	-&gt;setCredential ( $password );</pre>
<p>Enfin on essaye d&#8217;identifier l&#8217;utilisateur :</p>
<pre class="brush: php;">$authAuthenticate = $authAdapter-&gt;authenticate ();</pre>
<p>Maintenant il faut regarder si cette authentification à réussi ou échoué.</p>
<pre class="brush: php;">if ($authAuthenticate-&gt;isValid ()) {</pre>
<p>Si elle est valide, on va mettre en <strong>variable de session les informations de l&#8217;utilisateur</strong>. À ce moment vous pouvez mettre toutes les informations relatives à l&#8217;utilisateur. On peu même envisager de créer une classe pour stocker toutes ces informations. Dans le cas présent, seule les informations issu de la table users sont utiles. On commence donc par <strong>récupérer l&#8217;espace de stockage (storage) par défaut de l&#8217;application</strong></p>
<pre class="brush: php;">$storage = Zend_Auth::getInstance ()-&gt;getStorage ();</pre>
<p>Puis on y ajoute les informations de l&#8217;utilisateur, on y enlève bien sur le mot de passe :</p>
<pre class="brush: php;">$storage-&gt;write ( $authAdapter-&gt;getResultRowObject ( null, 'password' ) );</pre>
<p>Et enfin on redirige l&#8217;utilisateur sur la page principale de l&#8217;application</p>
<pre class="brush: php;">$this-&gt;_helper-&gt;redirector ( 'index', 'index' );</pre>
<p>Et pour finir si le couple login / password n&#8217;était pas bon, on ajoute une description au formulaire :</p>
<pre class="brush: php;">} else {
$form-&gt;addError ( 'Il n\'existe pas d\'utilisateur avec ce mot de passe' );
}</pre>
<p>Voilà l&#8217;action du controller est faite on peu passer à la suite.</p>
<h2 id="deconnexion">Déconnexion</h2>
<p>Si l&#8217;utilisateur veut se déconnecter, il doit cliquer sur un lien qui map l&#8217;action suivante :<br />
public function logoutAction() {</p>
<pre class="brush: php;">Zend_Auth::getInstance ()-&gt;clearIdentity ();
$this-&gt;helper-&gt;redirector ( 'index', 'index' );
}</pre>
<p>Grâce à la ligne <em>Zend_Auth::getInstance ()-&gt;clearIdentity ();</em> on supprime l&#8217;identification de l&#8217;utilisateur.</p>
<h2 id="verif">Vérification de connexion</h2>
<p>Il faut bien entendu vérifier (si l&#8217;on code proprement) si l&#8217;utilisateur est déjà connecté si il veut se déconnecter, et il faut aussi vérifier que l&#8217;utilisateur connecté puisse seulement se déconnecter dans <strong>ce</strong> controller. On va utiliser la méthode <em>preDispatch</em> du controller, cette méthode est systématiquement appelé à l&#8217;exécution d&#8217;une action du controller. Je vous donne le code et je l&#8217;explique après :</p>
<pre class="brush: php;">public function preDispatch() {
	if (Zend_Auth::getInstance ()-&gt;hasIdentity ()) {
		if ('logout' != $this-&gt;getRequest ()-&gt;getActionName ()) {
			$this-&gt;_helper-&gt;redirector ( 'index', 'index' );
		}
	} else {
		if ('logout' == $this-&gt;getRequest ()-&gt;getActionName ()) {
			$this-&gt;_helper-&gt;redirector ( 'index' );
		}
	}
}</pre>
<p>On commence par vérifier si l&#8217;utilisateur est connecté, si il l&#8217;est et que l&#8217;action sur laquelle il veut aller est différente de <em>&#8216;logout&#8217;</em> on le renvoi sur la page d&#8217;accueil du site. Sinon, si il n&#8217;est pas connecté et qu&#8217;il veut se déconnecter, on l&#8217;envoi sur l&#8217;action qui permet de se connecter.</p>
<h2 id="zend-view-helper">Zend_View_Helper</h2>
<p><strong>Comment faire automatiquement un lien qui permet de se connecter si on ne l&#8217;est pas, ou alors de se deconnecter si on l&#8217;est ?</strong> Et bien on utilise ce qu&#8217;on appel un <strong>Zend_View_Helper</strong>, c&#8217;est un bout de code qui va être utilisable dans le layout.</p>
<pre class="brush: php;">class Zend_View_Helper_ProfileLink extends Zend_View_Helper_Abstract {
	public function profileLink() {
		$helperUrl = new Zend_View_Helper_Url ( );
		$auth = Zend_Auth::getInstance ();
		if ($auth-&gt;hasIdentity ()) {
			$username = $auth-&gt;getIdentity ()-&gt;prenom . ' ' . strtoupper ( substr ( $auth-&gt;getIdentity ()-&gt;nom, 0, 1 ) ) . '.';
			$logoutLink = $helperUrl-&gt;url ( array ('action' =&gt; 'logout', 'controller' =&gt; 'login' ) );
			return 'Salut ' . $username . ' (&lt;a href=&quot;' . $logoutLink . '&quot;&gt;Logout&lt;/a&gt;)';
		}
		$loginLink = $helperUrl-&gt;url ( array ('action' =&gt; 'login', 'controller' =&gt; 'login' ) );
		return '&lt;a href=&quot;' . $loginLink . '&quot;&gt;Login&lt;/a&gt;';
	}
}</pre>
<p>On commence par créer un nouveau <em>Zend_View_Helper_Url</em> pour nous aider à construire les URL, puis on récupère une instance de Zend_Auth. Donc si il y a un utilisateur de connecté, on récupère son identité. Puis on construit l&#8217;URL de déconnexion, et enfin on retourne la chaine de caractère (message + lien). Si l&#8217;utilisateur n&#8217;est pas connecté, on construit le lien de connexion, et on retourne la chaine de caractère.<br />
Si on veut utiliser ce script dans la vue, il va falloir faire  :</p>
<pre class="brush: php;">echo $this-&gt;profileLink();</pre>
<p>Et voila le code du controller en entier :</p>
<pre class="brush: php; collapse: true; light: false; toolbar: true;">&lt; ?php

class LoginController extends Zend_Controller_Action {

	public function init() {
		/* Initialize action controller here */
		Zend_Auth::getInstance ()-&gt;clearIdentity ();

	}

	public function preDispatch() {
		if (Zend_Auth::getInstance ()-&gt;hasIdentity ()) {
			if ('logout' != $this-&gt;getRequest ()-&gt;getActionName ()) {
				$this-&gt;_helper-&gt;redirector ( 'index', 'index' );
			}
		} else {
			if ('logout' == $this-&gt;getRequest ()-&gt;getActionName ()) {
				$this-&gt;_helper-&gt;redirector ( 'index' );
			}
		}
	}

	public function indexAction() {
		$this-&gt;_forward ( 'login' );
	}

	public function loginAction() {

		$form = new Model_Form_User_Login ( );
		$this-&gt;view-&gt;formLogin = $form;

		if ($this-&gt;_request-&gt;isPost ()) {
			$formData = $this-&gt;_request-&gt;getPost ();
			if ($form-&gt;isValid ( $formData )) {
				$email = $form-&gt;getValue ( 'email' );
				$password = $form-&gt;getValue ( 'password' );
				$authAdapter = new Zend_Auth_Adapter_DbTable ( Zend_Db_Table::getDefaultAdapter () );
				$authAdapter-&gt;setTableName ( 'users' )
					-&gt;setIdentityColumn ( 'email' )
					-&gt;setCredentialColumn ( 'password' )
					-&gt;setCredentialTreatment ( 'MD5(?)' )
					-&gt;setIdentity ( $email )
					-&gt;setCredential ( $password );
				$authAuthenticate = $authAdapter-&gt;authenticate ();
				if ($authAuthenticate-&gt;isValid ()) {
					$storage = Zend_Auth::getInstance ()-&gt;getStorage ();
					$storage-&gt;write ( $authAdapter-&gt;getResultRowObject ( null, 'password' ) );
					$this-&gt;_helper-&gt;redirector ( 'index', 'index' );
				} else {
					$form-&gt;addError ( 'Il n\'existe pas d\'utilisateur avec ce mot de passe' );
				}
			}
		}
		$this-&gt;render ( 'index' );
	}

	public function logoutAction() {
		Zend_Auth::getInstance ()-&gt;clearIdentity ();
		$this-&gt;_helper-&gt;redirector ( 'index', 'index' );
	}

}
</pre>
<p><strong >Articles en rapport : :</strong>
<ul class="similar-posts">
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-2/" rel="bookmark" title="20 novembre 2009">Zend Framework, Formulaire et Base de donnée, partie 2</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/" rel="bookmark" title="19 novembre 2009">Zend Framework, Formulaire et Base de donnée, partie 1</a></li>
<li><a href="http://blog.lyrixx.info/zend/application-de-site-e-commerce/" rel="bookmark" title="18 mars 2010">Application de site E-Commerce [Code-Source]</a></li>
<li><a href="http://blog.lyrixx.info/zend/css-javascript-et-zend-framework/" rel="bookmark" title="17 juin 2009">Css, JavaScript et Zend Framework</a></li>
<li><a href="http://blog.lyrixx.info/zend/comment-gerer-une-base-de-donnee-avec-le-zend-framework/" rel="bookmark" title="19 octobre 2009">Comment gérer une base de donnée avec le Zend Frameworkls</a></li>
</ul>
<p><!-- Similar Posts took 8.518 ms --></p>



Et on peut meme partager l'article:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-lauthentification-avec-zend_auth-du-zend-framework%2F&amp;partner=sociable" title="Print"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Gerer%20l%27authentification%20avec%20Zend_Auth%20du%20Zend%20Framework%20-%20http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-lauthentification-avec-zend_auth-du-zend-framework%2F" title="Twitter"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-lauthentification-avec-zend_auth-du-zend-framework%2F&amp;t=Gerer%20l%27authentification%20avec%20Zend_Auth%20du%20Zend%20Framework" title="Facebook"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-lauthentification-avec-zend_auth-du-zend-framework%2F&amp;title=Gerer%20l%27authentification%20avec%20Zend_Auth%20du%20Zend%20Framework&amp;bodytext=%0D%0AComment%20faire%20un%20syst%C3%A8me%20de%20login%20sur%20son%20application%20%3F%20On%20va%20voir%20comment%20mettre%20en%20place%20un%20syst%C3%A8me%20de%20connexion%20d%27utilisateur%20dans%20son%20application%20avec%20le%20Zend%20Framework.%20Pour%20ce%20faire%20on%20va%20utiliser%20le%20composant%20Zend_Auth.%20Il%20va%20falloir%20comme" title="Digg"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-lauthentification-avec-zend_auth-du-zend-framework%2F&amp;title=Gerer%20l%27authentification%20avec%20Zend_Auth%20du%20Zend%20Framework&amp;notes=%0D%0AComment%20faire%20un%20syst%C3%A8me%20de%20login%20sur%20son%20application%20%3F%20On%20va%20voir%20comment%20mettre%20en%20place%20un%20syst%C3%A8me%20de%20connexion%20d%27utilisateur%20dans%20son%20application%20avec%20le%20Zend%20Framework.%20Pour%20ce%20faire%20on%20va%20utiliser%20le%20composant%20Zend_Auth.%20Il%20va%20falloir%20comme" title="del.icio.us"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-lauthentification-avec-zend_auth-du-zend-framework%2F&amp;title=Gerer%20l%27authentification%20avec%20Zend_Auth%20du%20Zend%20Framework&amp;annotation=%0D%0AComment%20faire%20un%20syst%C3%A8me%20de%20login%20sur%20son%20application%20%3F%20On%20va%20voir%20comment%20mettre%20en%20place%20un%20syst%C3%A8me%20de%20connexion%20d%27utilisateur%20dans%20son%20application%20avec%20le%20Zend%20Framework.%20Pour%20ce%20faire%20on%20va%20utiliser%20le%20composant%20Zend_Auth.%20Il%20va%20falloir%20comme" title="Google Bookmarks"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.netvibes.com/share?title=Gerer%20l%27authentification%20avec%20Zend_Auth%20du%20Zend%20Framework&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-lauthentification-avec-zend_auth-du-zend-framework%2F" title="Netvibes"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/netvibes.png" title="Netvibes" alt="Netvibes" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.blogospherenews.com/submit.php?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-lauthentification-avec-zend_auth-du-zend-framework%2F&amp;title=Gerer%20l%27authentification%20avec%20Zend_Auth%20du%20Zend%20Framework" title="Blogosphere News"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/blogospherenews.png" title="Blogosphere News" alt="Blogosphere News" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-lauthentification-avec-zend_auth-du-zend-framework%2F" title="Identi.ca"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-lauthentification-avec-zend_auth-du-zend-framework%2F&amp;title=Gerer%20l%27authentification%20avec%20Zend_Auth%20du%20Zend%20Framework&amp;source=LyRiX+Blog+Tuto%2C+Zend%2C+Php%2C+Ajax%2C+web+2.0%2C+Flex%2C+Serveur%2C+Ubuntu%2C+Geek+%3A+Tout+ca+sur+un+blog&amp;summary=%0D%0AComment%20faire%20un%20syst%C3%A8me%20de%20login%20sur%20son%20application%20%3F%20On%20va%20voir%20comment%20mettre%20en%20place%20un%20syst%C3%A8me%20de%20connexion%20d%27utilisateur%20dans%20son%20application%20avec%20le%20Zend%20Framework.%20Pour%20ce%20faire%20on%20va%20utiliser%20le%20composant%20Zend_Auth.%20Il%20va%20falloir%20comme" title="LinkedIn"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-lauthentification-avec-zend_auth-du-zend-framework%2F" title="Technorati"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.wikio.fr/vote?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-lauthentification-avec-zend_auth-du-zend-framework%2F" title="Wikio FR"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/wikio.png" title="Wikio FR" alt="Wikio FR" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-lauthentification-avec-zend_auth-du-zend-framework%2F&amp;submitHeadline=Gerer%20l%27authentification%20avec%20Zend_Auth%20du%20Zend%20Framework&amp;submitSummary=%0D%0AComment%20faire%20un%20syst%C3%A8me%20de%20login%20sur%20son%20application%20%3F%20On%20va%20voir%20comment%20mettre%20en%20place%20un%20syst%C3%A8me%20de%20connexion%20d%27utilisateur%20dans%20son%20application%20avec%20le%20Zend%20Framework.%20Pour%20ce%20faire%20on%20va%20utiliser%20le%20composant%20Zend_Auth.%20Il%20va%20falloir%20comme&amp;submitCategory=science&amp;submitAssetType=text" title="Yahoo! Buzz"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/yahoobuzz.png" title="Yahoo! Buzz" alt="Yahoo! Buzz" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://ping.fm/ref/?link=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-lauthentification-avec-zend_auth-du-zend-framework%2F&amp;title=Gerer%20l%27authentification%20avec%20Zend_Auth%20du%20Zend%20Framework&amp;body=%0D%0AComment%20faire%20un%20syst%C3%A8me%20de%20login%20sur%20son%20application%20%3F%20On%20va%20voir%20comment%20mettre%20en%20place%20un%20syst%C3%A8me%20de%20connexion%20d%27utilisateur%20dans%20son%20application%20avec%20le%20Zend%20Framework.%20Pour%20ce%20faire%20on%20va%20utiliser%20le%20composant%20Zend_Auth.%20Il%20va%20falloir%20comme" title="Ping.fm"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/ping.png" title="Ping.fm" alt="Ping.fm" class="sociable-hovers" /></a>


<br/><br/><br /><hr />
<p><small>Auteur : © Greg pour <a href="http://blog.lyrixx.info">LyRiX Blog</a>.
<br /><a href="http://blog.lyrixx.info/zend/gerer-lauthentification-avec-zend_auth-du-zend-framework/">Article</a> publié le :  23-12-2009, dans : <a href="http://blog.lyrixx.info/category/zend/" title="Voir tous les articles dans Zend Framework" rel="category tag">Zend Framework</a>.
<a href="http://blog.lyrixx.info/zend/gerer-lauthentification-avec-zend_auth-du-zend-framework/">Liens direct vers l'article (permalink) </a>
<br/>Mot Clé : <a href="http://blog.lyrixx.info/tag/layout/" rel="tag">Layout</a>, <a href="http://blog.lyrixx.info/tag/view/" rel="tag">View</a>, <a href="http://blog.lyrixx.info/tag/zend-framework/" rel="tag">Zend Framework</a>, <a href="http://blog.lyrixx.info/tag/zend_auth/" rel="tag">Zend_Auth</a>, <a href="http://blog.lyrixx.info/tag/zend_db/" rel="tag">Zend_Db</a>, <a href="http://blog.lyrixx.info/tag/zend_view_helper/" rel="tag">Zend_View_Helper</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.lyrixx.info/zend/gerer-lauthentification-avec-zend_auth-du-zend-framework/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>Zend Framework, Formulaire et Base de donnée, partie 2</title>
		<link>http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-2/</link>
		<comments>http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-2/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 00:02:41 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Bootstrap]]></category>
		<category><![CDATA[Controller]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[View]]></category>
		<category><![CDATA[Zend_Db]]></category>
		<category><![CDATA[Zend_Form]]></category>
		<category><![CDATA[Zend_Translate]]></category>

		<guid isPermaLink="false">http://blog.lyrixx.info/?p=947</guid>
		<description><![CDATA[On continue avec la deuxième partie de la gestion d&#8217;un formulaire, de la création de formulaire, et d&#8217;ajout de donnée en BDD dans le Zend Framework. Dans cette partie nous verrons comment afficher les données, les modifier à l&#8217;aide du même formulaire que pour l&#8217;ajout, et la suppression des données. Sommaire Partie 1 Sommaire Préparation [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-827" title="database" src="http://blog.lyrixx.info/wp-content/uploads/2009/10/database.png" alt="database" width="675" height="146" /></p>
<p>On continue avec la deuxième partie de la <a title="Zend Framework, Formulaire et Base de donnée, partie 1" href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/">gestion d&#8217;un formulaire</a>, de <strong>la création de formulaire, et d&#8217;ajout de donnée en BDD</strong> dans le <strong>Zend Framework</strong>. Dans cette partie nous verrons <strong>comment afficher les données, les modifier à l&#8217;aide du même formulaire que pour l&#8217;ajout, et la suppression des données</strong>.<br />
<span id="more-947"></span></p>
<h2 id='sommaire'>Sommaire</h2>
<ul>
<li>Partie 1
<ul>
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/#sommaire">Sommaire</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/#bdd">Préparation de la BDD</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/#formulaire">Préparation du formulaire</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/#affichage">Affichage du formulaire</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/#controller">Le Controller du formulaire</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/#validateur">Gérer d&#8217;autres validateurs</a></li>
<li><a href=http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/"#conclusion">Conclusion</a></li>
</ul>
</li>
<li>Partie 2
<ul>
<li><a href="#sommaire">Sommaire</a></li>
<li><a href="#read">Afficher des enregistrement</a></li>
<li><a href="#update">Mettre a jour des enregistrement</a></li>
<li><a href="#delete">Supprimer des enregistrement</a></li>
<li><a href="#conclusion">Conclusion</a></li>
</ul>
</li>
</ul>
<h2 id='read'>Afficher les données de la base de données.</h2>
<p>Il faut tout d&#8217;abord toucher a notre <em>controller</em> qui gère la page <em>user</em> pour donner à la vue une instance de la classe ><em>Model_DbTable_Users()</em>. Vu que j&#8217;utilise souvent cette classe, j&#8217;ai fait une méthode dans la classe <em>controller</em> : (<em>application/modules/Frontend/controllers/UserController.php</em>)</p>
<pre class="brush: php;">private function getUsersAll() {
	$dbUser = new Model_DbTable_Users();
	return $dbUser-&gt;fetchAll()-&gt;toArray();
}</pre>
<p>Et maintenant on a juste a passer cette classe à la vue :</p>
<pre class="brush: php;">public function indexAction(){
	$this-&gt;view-&gt;usersAll = $this-&gt;getUsersAll();
}</pre>
<p>On passe maintenant à la vue (<em>application/modules/Frontend/views/scripts/user/index.phtml</em>).</p>
<pre class="brush: php;">if (isset($this-&gt;usersAll)){ ?&gt;
	&lt;h2&gt;&lt;?php echo $this-&gt;translate('view_user_modify')?&gt; : &lt;/h2&gt;
	&lt;table&gt;
		&lt;tr&gt;
	    	&lt;th&gt;&lt;?php echo $this-&gt;translate('view_user_firstname')?&gt;&lt;/th&gt;
	    	&lt;th&gt;&lt;?php echo $this-&gt;translate('view_user_name')?&gt;&lt;/th&gt;
	    	&lt;th&gt;&lt;?php echo $this-&gt;translate('view_user_email')?&gt;&lt;/th&gt;
	    	&lt;th&gt;&lt;?php echo $this-&gt;translate('view_user_modify')?&gt;&lt;/th&gt;

		&lt;/tr&gt;
		&lt;?php
		$users = $this-&gt;usersAll;
		foreach ($users as $user){
			if ($user['active'] == 1){
				echo '&lt;tr&gt;';
			}else{
				echo '&lt;tr style=&quot;text-decoration:line-through&quot;&gt;';
			}
			echo '&lt;td&gt;'.$user['nom'].'&lt;/td&gt;';
			echo '&lt;td&gt;'.$user['prenom'].'&lt;/td&gt;';
			echo '&lt;td&gt;'.$user['email'].'&lt;/td&gt;';

			echo '&lt;td&gt;&lt;a href=&quot;'.$this-&gt;url(array('action'=&gt;'edit','id'=&gt;$user['idUser'])).'&quot;&gt;Modifier&lt;/a&gt; | &lt;a href=&quot;'.$this-&gt;url(array('action'=&gt;'del','id'=&gt;$user['idUser'])).'&quot; &gt;Supprimer&lt;/a&gt;&lt;/td&gt;';
			echo '&lt;/tr&gt;';
		}
		?&gt;
	&lt;/table&gt;
&lt;?php
}
?&gt;</pre>
<p style="text-align: center;"><a href="http://blog.lyrixx.info/wp-content/uploads/2009/11/liste-users.png" rel="lightbox[947]"><img class="aligncenter size-full wp-image-948" title="liste users" src="http://blog.lyrixx.info/wp-content/uploads/2009/11/liste-users.png" alt="liste users" width="675" height="220" /></a></p>
<p>On commence par vérifier que la variable <em>usersAll</em> est bien définit. Dans ce cas la on construit notre tableau assez naturellement. Encore une fois j&#8217;utilise ici la <a href="http://blog.lyrixx.info/zend/mettre-en-place-un-systeme-de-traduction-dans-zend-framework/" title="Comment mettre en place un systeme de traduction dans Zend Framework" >traduction du framework</a> (mais on n&#8217;est pas forcé de le faire).</p>
<pre class="brush: php;">			if ($user['active'] == 1){
				echo '&lt;tr&gt;';
			}else{
				echo '&lt;tr style=&quot;text-decoration:line-through&quot;&gt;';
			}</pre>
<p>Ce code sert juste a vérifié que l&#8217;utilisateur est actif. Si il ne l&#8217;est pas on barre la ligne :</p>
<pre class="brush: php;">echo '&lt;td&gt;&lt;a href=&quot;'.$this-&gt;url(array('action'=&gt;'edit','id'=&gt;$user['idUser'])).'&quot;&gt;Modifier&lt;/a&gt; | &lt;a href=&quot;'.$this-&gt;url(array('action'=&gt;'del','id'=&gt;$user['idUser'])).'&quot; &gt;Supprimer&lt;/a&gt;&lt;/td&gt;';</pre>
<p>Enfin cette ligne est assez sympa : en effet on veut pouvoir<strong> éditer et supprimer des utilisateurs</strong>. Il nous faut donc des <strong>liens</strong> pour le faire. Et bien pour fabriquer ces liens on va utiliser une <em><strong>aide de vues</strong></em> (<em>View Helper : Zend_View_Helper_Url)</em> qui va nous construire notre lien directement. On lui passe comme argument un tableau, avec comme clés l&#8217;<em>action</em>, le <em>controller</em>, le <em>module</em> et des <em>paramètres</em>. Tout ces champs ne sont pas obligatoires. Dans mon cas, je reste sur le même <em>controller</em>, et donc le même <em>module</em>. Donc je n&#8217;utilise que l&#8217;<em>action</em> et un <em>paramètre id</em>. Ce paramètre est passé en <em>GET</em> donc directement dans l&#8217;<em>url</em>. De plus <em>zend></em> va gérer automatiquement l&#8217;<em><strong>url rewriting</strong></em>, qui est beaucoup plus<strong> user-friendly et seo-friendly</strong>. Voyons ce que donne le résultat : (il y a un peu de <em>css</em>)</p>
<h2 id='update'>Modification d&#8217;un enregistrement</h2>
<p>Donc notre lien pour modifier un utilisateur est déjà fait, et comme on a pu le voir, il pointe sur l&#8217;<em>action edit</em> du <em>controller UserController.php</em>. Il va donc falloir modifier celui-ci, ainsi que la classe qui gère le formulaire et la vue. On commence avec le formulaire. En fait on va utiliser la même classe que pour l&#8217;ajout, mais on va y rajouter un peu de code (à la fin de la méthode).</p>
<h3>Model</h3>
<pre class="brush: php;">		$idUser = $this-&gt;getIdUser();
		if (isset ( $idUser ) &amp;&amp; $idUser != &quot;&quot;) {
			$user = new Model_DbTable_Users ( );
			$user = $user-&gt;fetchRow ( array (&quot;idUser = ?&quot; =&gt; $idUser ) );
			if ($user != null) {
				$user = $user-&gt;toArray ();
				$this-&gt;populate ( $user );
			} else {
				throw new Zend_Exception ( &quot;Il n'y a pas de d'utilisateur avec l'id : &quot; . $idUser );
			}
			$password-&gt;setDescription ( &quot;form_user_update_password_change&quot; );
			$password-&gt;setRequired ( false );
			$submit-&gt;setLabel ( 'form_user_update_submit' );
		}</pre>
<p>On commence par récupérer la valeur de l&#8217;<em>id</em> de l&#8217;utilisateur. Bien entendu, il faut déclarer une variable (<em>private</em>) et faire le <em>getter</em> et le <em>setter</em> qui va bien. Si il y a bien une valeur et qu&#8217;elle est différente de null on récupère une instance de la classe <em>Model_DbTable_Users</em>. On sélectionne la ligne qui va bien en fonction de l&#8217;<em>id</em>. Si on a bien récupérer un utilisateur (c&#8217;est a dire qu&#8217;il y a bien un enregistrement avec cet id)> on <strong>peuple le formulaire</strong>, c&#8217;est a dire qu&#8217;on le rempli des données récupérer. Sinon on renvoi une erreur. Ensuite, ce n&#8217;est pas obligatoire, mais je laisse le choix a l&#8217;utilisateur : si il ne veut pas changer de mot de passe, il ne fait rien, sinon il en rentre un nouveau. Enfin on change le <em>label</em> du bouton envoyer>. Mais ce n&#8217;est pas finit. En effet il reste un problème de validateur> sur le champs <em>email</em>. Il vaut donc le supprimer, mais que si c&#8217;est le même email (saisi) que l&#8217;email qui est déjà dans la <em>BDD</em>. De la même marnière que dans la partie 1, on va devoir redéfinir la méthode <em>isValid</em> :</p>
<pre class="brush: php;">	public function isValid($data)
	{
	    $this-&gt;getElement('password')-&gt;addValidator(new App_Validate_PasswordMatch($data['password2']));
		if ($this-&gt;getElement('email')-&gt;getValue() == $data['email']){
				$this-&gt;getElement('email')-&gt;removeValidator ( &quot;Zend_Validate_Db_NoRecordExists&quot; );
		}
	    return parent::isValid($data);
	}</pre>
<p>Par rapport au code de la partie 1, on a rajouté le bloc <em>IF</em> : Si la valeur en base est la même que la valeur saisi, on supprime le validateur>, sinon on ne fait rien (et donc on le laisse).<br />
Voilà notre formulaire est enfin prêt. On passe maintenant au <em>controller</em>.</p>
<h3>Controller</h3>
<pre class="brush: php;">	public function editAction() {
		try {
			$form = new Model_Form_User_User ( );
			$form-&gt;setIdUser($this-&gt;getRequest ()-&gt;getParam ( 'id' ));
			$form-&gt;init();
			$this-&gt;view-&gt;formUserEdit = $form;
		} catch (Zend_Exception $e) {
			$this-&gt;view-&gt;formUserEdit = $e-&gt;getMessage();
		}
	}</pre>
<p>On essaye d&#8217;instancier la classe <em>Model_Form_User_User ( )</em>. Ensuite on récupère la valeur du paramètre <em>id</em> (passer en <em>GET</em>) et on la passe a notre classe forme. On est obligé de refaire le formulaire puis on la passe a la vue. Si il y a un problème (pas d&#8217;utilisateur avec id X) on passe les erreurs a la vue.</p>
<pre class="brush: php;">		if ($this-&gt;_request-&gt;isPost ()) {
			$formData = $this-&gt;_request-&gt;getPost ();
			if ($form-&gt;isValid ( $formData )) {</pre>
<p>Ensuite, comme dans la première partie, on vérifie qu&#8217;il y ai des données de poster, et les recupère puis on les passes au validateur.</p>
<pre class="brush: php;">				$user = new Model_DbTable_Users ( );
				if ($formData ['password'] == &quot;&quot;) {
					unset ( $formData ['password'] );
					unset ( $formData ['password2'] );
				} else {
					$formData ['password'] = md5 ( $formData ['password'] );
					unset ( $formData ['password2'] );
				}
				unset ( $formData ['submit'] );
				$result = $user-&gt;update ( $formData, array (&quot;idUser = ?&quot; =&gt; $formData ['idUser'] ) );</pre>
<p>Si elle sont valide, on instancie la classe  <em>Model_DbTable_Users</em>. On vérifie la valeur du champs <em>password</em> : Si elle est nul, on enlève du tableau de donnée <em>formData</em> les champs <em>password</em> et <em>password2</em>, sinon on chiffre en md5 le champ <em>password</em> et en enlève <em>password2</em>. Enfin on enlève le champ <em>submit</em>. Et pour finir on met a jour la base de donnée.</p>
<pre class="brush: php;">$this-&gt;_helper-&gt;redirector ( 'index', 'user' );</pre>
<p>Enfin on redirige vers l&#8217;<em>action index</em> du <em>controller user</em>.</p>
<h3>Vue</h3>
<p>Ici c&#8217;est le même principe que pour le formulaire d&#8217;ajout</p>
<pre class="brush: php;">if (isset($this-&gt;formUserEdit)){ ?&gt;
	&lt;h2&gt;&lt;?php echo $this-&gt;translate('view_user_edit')?&gt; : &lt;/h2&gt;
	&lt;?php echo $this-&gt;formUserEdit;
}</pre>
<p style="text-align: center;"><a href="http://blog.lyrixx.info/wp-content/uploads/2009/11/edit-user.png" rel="lightbox[947]"><img class="aligncenter size-full wp-image-949" title="edit user" src="http://blog.lyrixx.info/wp-content/uploads/2009/11/edit-user.png" alt="edit user" width="468" height="669" /></a></p>
<h2 id='delete'>Supprimer un Enregistrement</h2>
<p>La suppression d&#8217;un utilisateur <strong>va se faire en deux étape</strong>, la première servant à confirmer la demande de suppression. Donc on crée une action intermédiaire qui passe à la vue la valeur de l&#8217;<em>id</em> de l&#8217;utilisateur.<br />
public function delAction() {</p>
<pre class="brush: php;">	public function delAction() {
		$id = $this-&gt;getRequest ()-&gt;getParam ( 'id' );
		$this-&gt;view-&gt;delUserId = $id;
		$this-&gt;render('index');
	}</pre>
<p>Et on ajoute à la vue le code qui va générer notre demande de suppression. Encore ici on réutilise l&#8217;aide de vue <em>url</em>.</p>
<pre class="brush: php;">if (isset($this-&gt;delUserId)){ ?&gt;
	&lt;h2&gt;&lt;?php echo $this-&gt;translate('are_you_sure')?&gt; : &lt;/h2&gt;
	&lt;a href=&quot;&lt;?php echo $this-&gt;url(array('action'=&gt;'delete','id'=&gt;$this-&gt;delUserId));?&gt;&quot;&gt;&lt;?php echo $this-&gt;translate('yes')?&gt;&lt;/a&gt;
	&lt;a href=&quot;&lt;?php echo $this-&gt;url(array('action'=&gt;'index','controller'=&gt;'user'),null,true)?&gt;&quot;&gt;&lt;?php echo $this-&gt;translate('no')?&gt;&lt;/a&gt;
	&lt;?php
}</pre>
<p>Enfin si l&#8217;utilisateur clique sur oui, on exécute l&#8217;action suivante :</p>
<pre class="brush: php;">	public function deleteAction() {
		public function deleteAction() {
		$id = $this-&gt;getRequest ()-&gt;getParam ( 'id' );
		$user = new Model_DbTable_Users ( );
		$result = $user-&gt;delete ( array (&quot;idUser = ?&quot; =&gt; $id ) );
		$this-&gt;_helper-&gt;redirector ( 'index', 'user' );
	}</pre>
<p>Et voilà le tour est joué. On a bien supprimer notre utilisateur.</p>
<h2 id='conclusion'>Conclusion</h2>
<p>On à enfin finit la gestion d&#8217;une table de la base de donnée grâce a un seul formulaire. Je vous donne donc maintenant le code de tous les fichiers dont j&#8217;ai eu besoin. Il y a des petites différence dans la mesure ou j&#8217;ai ajouté des messages de confirmation ou d&#8217;échec. De plus la structure de l&#8217;archive n&#8217;est pas bonne du tout&#8230; Il y a bien tous les fichiers (enfin je pense, mais c&#8217;est plus a titre indicatif). Il ne fonctionneront pas sans le bootstrap, le fichier de config, le fichier de traduction et enfin la bdd. Je referais un gros package plus tard.<br />
<a href="http://blog.lyrixx.info/wp-content/uploads/2009/11/formulaire.zip">Fichiers</a></p>
<p><strong >Articles en rapport : :</strong>
<ul class="similar-posts">
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/" rel="bookmark" title="19 novembre 2009">Zend Framework, Formulaire et Base de donnée, partie 1</a></li>
<li><a href="http://blog.lyrixx.info/zend/gerer-lauthentification-avec-zend_auth-du-zend-framework/" rel="bookmark" title="23 décembre 2009">Gerer l&#8217;authentification avec Zend_Auth du Zend Framework</a></li>
<li><a href="http://blog.lyrixx.info/zend/comment-gerer-une-base-de-donnee-avec-le-zend-framework/" rel="bookmark" title="19 octobre 2009">Comment gérer une base de donnée avec le Zend Frameworkls</a></li>
<li><a href="http://blog.lyrixx.info/zend/comment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool/" rel="bookmark" title="18 mars 2010">Comment bien démarrer un projet Zend Framework grâce aux Zend_Tool</a></li>
<li><a href="http://blog.lyrixx.info/zend-framework/" rel="bookmark" title="19 juin 2009">Zend Framework</a></li>
</ul>
<p><!-- Similar Posts took 7.941 ms --></p>



Et on peut meme partager l'article:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-2%2F&amp;partner=sociable" title="Print"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%202%20-%20http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-2%2F" title="Twitter"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-2%2F&amp;t=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%202" title="Facebook"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-2%2F&amp;title=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%202&amp;bodytext=%0D%0A%0D%0AOn%20continue%20avec%20la%20deuxi%C3%A8me%20partie%20de%20la%20gestion%20d%27un%20formulaire%2C%20de%20la%20cr%C3%A9ation%20de%20formulaire%2C%20et%20d%27ajout%20de%20donn%C3%A9e%20en%20BDD%20dans%20le%20Zend%20Framework.%20Dans%20cette%20partie%20nous%20verrons%20comment%20afficher%20les%20donn%C3%A9es%2C%20les%20modifier%20%C3%A0%20l%27aide%20du%20m%C3%AAme%20" title="Digg"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-2%2F&amp;title=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%202&amp;notes=%0D%0A%0D%0AOn%20continue%20avec%20la%20deuxi%C3%A8me%20partie%20de%20la%20gestion%20d%27un%20formulaire%2C%20de%20la%20cr%C3%A9ation%20de%20formulaire%2C%20et%20d%27ajout%20de%20donn%C3%A9e%20en%20BDD%20dans%20le%20Zend%20Framework.%20Dans%20cette%20partie%20nous%20verrons%20comment%20afficher%20les%20donn%C3%A9es%2C%20les%20modifier%20%C3%A0%20l%27aide%20du%20m%C3%AAme%20" title="del.icio.us"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-2%2F&amp;title=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%202&amp;annotation=%0D%0A%0D%0AOn%20continue%20avec%20la%20deuxi%C3%A8me%20partie%20de%20la%20gestion%20d%27un%20formulaire%2C%20de%20la%20cr%C3%A9ation%20de%20formulaire%2C%20et%20d%27ajout%20de%20donn%C3%A9e%20en%20BDD%20dans%20le%20Zend%20Framework.%20Dans%20cette%20partie%20nous%20verrons%20comment%20afficher%20les%20donn%C3%A9es%2C%20les%20modifier%20%C3%A0%20l%27aide%20du%20m%C3%AAme%20" title="Google Bookmarks"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.netvibes.com/share?title=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%202&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-2%2F" title="Netvibes"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/netvibes.png" title="Netvibes" alt="Netvibes" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.blogospherenews.com/submit.php?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-2%2F&amp;title=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%202" title="Blogosphere News"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/blogospherenews.png" title="Blogosphere News" alt="Blogosphere News" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-2%2F" title="Identi.ca"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-2%2F&amp;title=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%202&amp;source=LyRiX+Blog+Tuto%2C+Zend%2C+Php%2C+Ajax%2C+web+2.0%2C+Flex%2C+Serveur%2C+Ubuntu%2C+Geek+%3A+Tout+ca+sur+un+blog&amp;summary=%0D%0A%0D%0AOn%20continue%20avec%20la%20deuxi%C3%A8me%20partie%20de%20la%20gestion%20d%27un%20formulaire%2C%20de%20la%20cr%C3%A9ation%20de%20formulaire%2C%20et%20d%27ajout%20de%20donn%C3%A9e%20en%20BDD%20dans%20le%20Zend%20Framework.%20Dans%20cette%20partie%20nous%20verrons%20comment%20afficher%20les%20donn%C3%A9es%2C%20les%20modifier%20%C3%A0%20l%27aide%20du%20m%C3%AAme%20" title="LinkedIn"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-2%2F" title="Technorati"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.wikio.fr/vote?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-2%2F" title="Wikio FR"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/wikio.png" title="Wikio FR" alt="Wikio FR" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-2%2F&amp;submitHeadline=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%202&amp;submitSummary=%0D%0A%0D%0AOn%20continue%20avec%20la%20deuxi%C3%A8me%20partie%20de%20la%20gestion%20d%27un%20formulaire%2C%20de%20la%20cr%C3%A9ation%20de%20formulaire%2C%20et%20d%27ajout%20de%20donn%C3%A9e%20en%20BDD%20dans%20le%20Zend%20Framework.%20Dans%20cette%20partie%20nous%20verrons%20comment%20afficher%20les%20donn%C3%A9es%2C%20les%20modifier%20%C3%A0%20l%27aide%20du%20m%C3%AAme%20&amp;submitCategory=science&amp;submitAssetType=text" title="Yahoo! Buzz"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/yahoobuzz.png" title="Yahoo! Buzz" alt="Yahoo! Buzz" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://ping.fm/ref/?link=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-2%2F&amp;title=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%202&amp;body=%0D%0A%0D%0AOn%20continue%20avec%20la%20deuxi%C3%A8me%20partie%20de%20la%20gestion%20d%27un%20formulaire%2C%20de%20la%20cr%C3%A9ation%20de%20formulaire%2C%20et%20d%27ajout%20de%20donn%C3%A9e%20en%20BDD%20dans%20le%20Zend%20Framework.%20Dans%20cette%20partie%20nous%20verrons%20comment%20afficher%20les%20donn%C3%A9es%2C%20les%20modifier%20%C3%A0%20l%27aide%20du%20m%C3%AAme%20" title="Ping.fm"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/ping.png" title="Ping.fm" alt="Ping.fm" class="sociable-hovers" /></a>


<br/><br/><br /><hr />
<p><small>Auteur : © Greg pour <a href="http://blog.lyrixx.info">LyRiX Blog</a>.
<br /><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-2/">Article</a> publié le :  20-11-2009, dans : <a href="http://blog.lyrixx.info/category/zend/" title="Voir tous les articles dans Zend Framework" rel="category tag">Zend Framework</a>.
<a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-2/">Liens direct vers l'article (permalink) </a>
<br/>Mot Clé : <a href="http://blog.lyrixx.info/tag/bootstrap/" rel="tag">Bootstrap</a>, <a href="http://blog.lyrixx.info/tag/controller/" rel="tag">Controller</a>, <a href="http://blog.lyrixx.info/tag/model/" rel="tag">Model</a>, <a href="http://blog.lyrixx.info/tag/mysql/" rel="tag">Mysql</a>, <a href="http://blog.lyrixx.info/tag/view/" rel="tag">View</a>, <a href="http://blog.lyrixx.info/tag/zend-framework/" rel="tag">Zend Framework</a>, <a href="http://blog.lyrixx.info/tag/zend_db/" rel="tag">Zend_Db</a>, <a href="http://blog.lyrixx.info/tag/zend_form/" rel="tag">Zend_Form</a>, <a href="http://blog.lyrixx.info/tag/zend_translate/" rel="tag">Zend_Translate</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-2/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Zend Framework, Formulaire et Base de donnée, partie 1</title>
		<link>http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/</link>
		<comments>http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 05:30:14 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Bootstrap]]></category>
		<category><![CDATA[Controller]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[View]]></category>
		<category><![CDATA[Zend_Db]]></category>
		<category><![CDATA[Zend_Form]]></category>
		<category><![CDATA[Zend_Translate]]></category>

		<guid isPermaLink="false">http://blog.lyrixx.info/?p=929</guid>
		<description><![CDATA[Hello, On va voir aujourd&#8217;hui comment construire et gérer un formulaire, ajouter les données récupéré dans une base de données, afficher ces données, et enfin modifier et supprimer celles-ci. En gros, on va utiliser les propriétés CRUD de Zend Framework en y associant une base de donnée et un formulaire. P.S. : Pendant la rédaction [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-827" title="database" src="http://blog.lyrixx.info/wp-content/uploads/2009/10/database.png" alt="database" width="675" height="146" /></p>
<p>Hello,<br />
On va voir aujourd&#8217;hui <strong>comment construire et gérer un formulaire</strong>, <strong>ajouter les données récupéré dans une base de données</strong>, <strong>afficher ces données</strong>, et enfin <strong>modifier </strong>et <strong>supprimer </strong>celles-ci. En gros, on va utiliser les propriétés <strong><acronym title="Create Read Update Delete">CRUD</acronym></strong> de <strong>Zend Framework</strong> en y associant une <strong>base de donnée</strong> et un <strong>formulaire</strong>.<br />
P.S. : Pendant la rédaction de ce <strong>tuto</strong>, je me suis rendu compte qu&#8217;il allait être beaucoup trop gros, du coup j&#8217;ai décidé de <strong>le couper en deux parties</strong>, une première sur la création du formulaire et l&#8217;ajout en base, une deuxième sur la l&#8217;affichage, la modification et la suppression.<br />
<span id="more-929"></span></p>
<h2 id='sommaire'>Sommaire</h2>
<ul>
<li>Partie 1
<ul>
<li><a href="#sommaire">Sommaire</a></li>
<li><a href="#bdd">Préparation de la BDD</a></li>
<li><a href="#formulaire">Préparation du formulaire</a></li>
<li><a href="#affichage">Affichage du formulaire</a></li>
<li><a href="#controller">Le Controller du formulaire</a></li>
<li><a href="#validateur">Gérer d&#8217;autres validateurs</a></li>
<li><a href="#conclusion">Conclusion</a></li>
</ul>
</li>
<li>Partie 2
<ul>
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-2/#sommaire">Sommaire</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-2/#read">Afficher des enregistrement</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-2/#update">Mettre a jour des enregistrement</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-2/#delete">Supprimer des enregistrement</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-2/#conclusion">Conclusion</a></li>
</ul>
</li>
</ul>
<h2 id='bdd'>Préparation de la base de donnée :</h2>
<p style="text-align: center;"><a href="http://blog.lyrixx.info/wp-content/uploads/2009/11/database.png" rel="lightbox[929]"><img class="aligncenter size-full wp-image-931" title="database user" src="http://blog.lyrixx.info/wp-content/uploads/2009/11/database.png" alt="database user" width="136" height="178" /></a></p>
<pre class="brush: sql;">CREATE  TABLE IF NOT EXISTS `Budget`.`users` (
`idUser` INT NOT NULL AUTO_INCREMENT ,
`nom` VARCHAR(20) NULL ,
`prenom` VARCHAR(20) NULL ,
`email` VARCHAR(30) NULL ,
`active` INT NULL ,
`level` INT NULL ,
`password` BIGINT NOT NULL ,
PRIMARY KEY (`idUser`) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
PACK_KEYS = DEFAULT
</pre>
<p>Comme <a title="Comment gérer une base de donnée avec le Zend Framework" href="http://blog.lyrixx.info/zend/comment-gerer-une-base-de-donnee-avec-le-zend-framework/">on a vu dans un précédant tutoriel</a>, il faut créer une <strong>classe qui va nous mapper les informations de la table</strong> (<strong><acronym title="Object Relation Mapper">ORM</acronym></strong> du <em>Zend Framework</em>).</p>
<pre class="brush: php;">&lt;?php
class Model_DbTable_Users extends Zend_Db_Table_Abstract {
	protected $_name = 'users';
	protected $_primary = array('idUser');
}</pre>
<h2 id='formulaire'>Préparation du formulaire</h2>
<p>Il existe plusieurs façons de faire un  formulaire : soit en utilisant des <em>tableaux php</em>, des <em>objets php</em>, un <em>fichier xml</em> etc&#8230; Pour ma part j&#8217;utilise des <em>objets php</em> et j&#8217;implémente pour chaque formulaire la classe <strong>Zend_Form</strong> (je vais y revenir). Pour plus de clarté dans mon arborescence de fichiers, je place tous mes formulaires, dans le dossier : <em>application/models/Form/</em> et comme ce formulaire ci concerne l&#8217;<em>ajout et/ou la modification d&#8217;un utilisateur</em>, mon fichier <em>User.php</em> est dans le dossier : <em>application/models/Form/User</em>. Donc le fichier de base doit ressembler à ça :</p>
<pre class="brush: php;">&lt;?php
class Model_Form_User_User extends Zend_Form {
	public function init() {
	}
}</pre>
<p>Comme on peut le voir, il faut étendre la classe <em>Zend_Form</em>, et mettre tout notre code qui ajoute des éléments dans la méthode <em>init()</em>. Ce code sera <strong>directement exécuter lors de la création d&#8217;un nouveau formulaire</strong>. Mais on va très vite ajouter des éléments à notre formulaire, sinon il ne va pas servir à grand chose. On peut, par exemple, <strong>ajouter un champ </strong><em><strong>input</strong></em><strong> texte</strong> grâce a ce code (le principe reste le même pour tous les types d&#8217;éléments) :</p>
<pre class="brush: php;">$champText = new Zend_Form_Element_Text('champText');
$champText-&gt;setLabel('un champ texte')
	-&gt;setRequired(true)
	-&gt;addValidator('notEmpty')
	-&gt;addFilter('StripTags')
        -&gt;addFilter('StringTrim');</pre>
<p>On commence par créer un <em>nouvel élément de type input texte</em>, puis on ajoute un <em>label</em>, on ajoute ensuite un <em>validateur</em> qui (dans ce cas) oblige la valeur à être rempli, puis on ajoute deux <em>filtres</em>. Il existe un grand nombre de <em>validateurs</em> et de <em>filtres</em>. On en verra quelques un ici. Mais comme on peut se douter, on va très souvent répéter le même code. Donc on peut se <strong>créer une petite classe</strong> qui ne va servir qu&#8217;a ajouter un <em>champ de type input texte</em> : (<em>application/models/Form/EText.php</em>)</p>
<pre class="brush: php;">&lt;?php
/**
 * @author lyrix
 *
 */
class Model_Form_EText extends Zend_Form_Element_Text {

	public function __construct($options = null,$label){
        	parent::__construct($options);
        	$this-&gt;setLabel($label)
			-&gt;setRequired(true)
			-&gt;addFilter('StripTags')
			-&gt;addFilter('StringTrim');
	}
}</pre>
<p><strong>Voilà, je vous donne maintenant une partie du code du formulaire et j&#8217;explique les points nouveaux.</strong></p>
<pre class="brush: php;">&lt;?php
class Model_Form_User_User extends Zend_Form {

	public function init() {
		$this-&gt;setName ( 'add_user' );

		$id = new Zend_Form_Element_Hidden ( 'idUser' );

		$nom = new Model_Form_EText ( 'nom', 'form_user_add_name' );

		$prenom = new Model_Form_EText ( 'prenom', 'form_user_add_firstname' );

		$email = new Model_Form_EText ( 'email', 'form_user_add_mail' );
		$email-&gt;addValidator ( 'EmailAddress' )-&gt;addValidator ( new Zend_Validate_Db_NoRecordExists ( 'users', 'email' ) );

		$password = new Zend_Form_Element_Password ( 'password' );
		$password-&gt;setLabel ( 'form_user_add_password' )-&gt;addFilter ( 'StripTags' )-&gt;addFilter ( 'StringTrim' )-&gt;setRequired ( true );

		$password2 = new Zend_Form_Element_Password ( 'password2' );
		$password2-&gt;setLabel ( 'form_user_add_password2' )-&gt;addFilter ( 'StripTags' )-&gt;addFilter ( 'StringTrim' );

		$active = new Zend_Form_Element_Checkbox ( 'active' );
		$active-&gt;setLabel ( 'form_user_add_enable' )-&gt;addFilter ( 'StripTags' )-&gt;addFilter ( 'StringTrim' )-&gt;setValue ( 1 );

		$level = new Zend_Form_Element_Select ( 'level' );
		$level-&gt;setLabel ( 'form_user_add_level' )-&gt;addFilter ( 'StripTags' )-&gt;addFilter ( 'StringTrim' );
		$levelOptions = array ();
		for($i = 0; $i &lt;= 9; $i ++) {
			$levelOptions [$i] = array ('key' =&gt; $i, 'value' =&gt; $i );
		}
		$level-&gt;addMultiOptions ( $levelOptions );

		$submit = new Zend_Form_Element_Submit ( 'submit' );
		$submit-&gt;setAttrib ( 'id', 'submitbutton' )-&gt;setLabel ( 'form_user_add_submit' );

		$elements = array ($id, $nom, $prenom, $email, $password, $password2, $active, $level, $submit );
		$this-&gt;addElements ( $elements );
	}
}
?&gt;</pre>
<p>Pour commencer je donne un <em>nom</em> a mon formulaire, ce qui peut être pratique pour le retrouver, en effet le nom du formulaire correspond a son <em>id</em> dans le <em>code html et css</em>. On peut aussi ajouter d&#8217;autre options, comme l&#8217;<em>action du controller</em>, mais dans notre cas, le formulaire et sa page de destination (<em>l&#8217;action</em>) sont les mêmes, donc on pas besoin de le définir.<br />
Ensuite, comme on peut le voir, on crée plusieurs éléments :</p>
<ul>
<li>l&#8217;<em>id</em> qui est un <em>élément 	de type hidden</em>, qui nous servira lors des mises à jour d&#8217;un utilisateur.</li>
<li><em>nom</em>, <em>prenom</em> qui sont 	des éléments de type <em>Etext</em>, les éléments qu&#8217;on a crée un peu plus haut.</li>
<li><em>email</em></li>
</ul>
<ul>
<li>Le champ <em>email</em> est aussi un 	champs de type <em>Etext</em>,</li>
<li>On a ajouter un <em>validateur 	d&#8217;adresse mail</em>, pratique, le boulot est déjà fait ! ( 	<em>-&gt;addValidator (&#8216;EmailAddress&#8217;)</em> )</li>
<li>On ajoute un second <em>validateur</em> qui vérifie que l&#8217;adresse mail n&#8217;est pas déjà dans la base de 	donnée ( <em>addValidator (new Zend_Validate_Db_NoRecordExists (&#8216;users&#8217;,'email&#8217;))</em> ). Le premier paramètre est le <em>nom de la 	table</em>, le second <em>l&#8217;attribut 	qui doit être unique</em>.</li>
</ul>
<li><em>password</em> et <em>password2</em> sont des <em>champs de type password</em>.</li>
<li><em>active</em> sert a savoir si 	l&#8217;utilisateur est actif. C&#8217;est un élément<em> de type Checkbox</em>, 	avec comme valeur par défaut 1 (case coché)</li>
<li><em>level</em> sert a niveau 	d&#8217;administration du site.</li>
<ul>
<li><em>De type Select</em></li>
<li>On ajoute dans un tableau des 	correspondances key = &gt; value qui représentent l<em>es options du 	select</em></li>
<li><em>On ajoute le tableau au select</em></li>
</ul>
<li><em>submit</em> qui est notre bouton 	envoyer.</li>
<p><strong>Les </strong><em><strong>labels</strong></em><strong> ne sont pas très significatifs ou user-friendly, c&#8217;est normale, j&#8217;utilise la traduction du zend framework</strong>. Enfin il ne reste plus qu&#8217;a ajouter tous ces éléments dans le formulaire lui même et le tours est joué, on a notre formulaire. Je tiens a rappelé qu&#8217;<strong>il existe vraiment un grand nombre de façon de fabriquer un formulaire</strong>, <strong>d&#8217;ajouter des filtres</strong>, <strong>des validateurs</strong>. Il y a quelques exemples ici, mais je ne peux pas faire un exemple pour chaque cas. Je vous recommande donc d&#8217;aller faire un tour sur sur le doc du <em><strong>zf</strong></em>.</p>
<h2 id='affichage'>Affichage du formulaire</h2>
<p><strong>Je ne vais pas m&#8217;occuper ici de styler le formulaire</strong>. Juste de l&#8217;afficher comme il vient. Par défaut <strong>zf</strong> utilise ce qu&#8217;on appel des <strong>décorateurs</strong>, il est possible de les personnaliser, mais ce n&#8217;est pas le but ici. Vous pouvez aller faire un tours <a href="http://www.dator.fr/tutorial-creer-une-application-avec-le-zend-framework-%E2%80%93-8-le-formulaire-dinscription-de-watchmydesk/">sur le site de dator pour avoir un exemple</a> de ce qu&#8217;on peut faire (même si je ne suis pas fan de sa technique, mais elle reste valide à 100% … huhu). Pour les <em>décorateurs</em>, le code a <em>ajouter / modifier</em> doit se trouver dans la classe qui fabrique notre formulaire.<br />
Donc il va falloir <strong>éditer la vu qui affichera le formulaire.</strong> Chez moi c&#8217;est <em>application/modules/Frontend/views/scripts/user/index.phtml</em> car c&#8217;est le <strong>controller</strong> <em>userController.php</em> qui va être appelé ici. Voilà a quoi doit ressembler la vues <strong>au minimum</strong> :</p>
<pre class="brush: php;">if (isset($this-&gt;formUser)){ ?&gt;
	&lt;h2&gt;&lt;?php echo $this-&gt;translate('view_user_add')?&gt; : &lt;/h2&gt;
	&lt;?php echo $this-&gt;formUser;
}</pre>
<p>On fait une simple vérification pour voir sur le formulaire a bien était envoyé par le <em>controller</em> à la vue et on l&#8217;affiche.</p>
<h2 id='controller'>Le controller du formulaire</h2>
<p>Bon on arrive la <strong>gestion du controller</strong> de notre formulaire. Je vous <strong>livre le code et je l&#8217;explique ensuite</strong> : (<em>application/modules/Frontend/controllers/UserController.php</em>)</p>
<pre class="brush: php;">&lt;?php
class UserController extends Zend_Controller_Action
{
    public function indexAction(){
        $form = new Model_Form_User_User();
        $this-&gt;view-&gt;formUser = $form;
        if ($this-&gt;_request-&gt;isPost()) {
            $formData = $this-&gt;_request-&gt;getPost();
            if ($form-&gt;isValid($formData)) {
                $users = new Model_DbTable_Users();
                $row = $users-&gt;createRow();
                $row-&gt;nom = $form-&gt;getValue('nom');
                $row-&gt;prenom = $form-&gt;getValue('prenom');
                $row-&gt;email = $form-&gt;getValue('email');
                $row-&gt;password = md5($form-&gt;getValue('password'));
                $row-&gt;active = $form-&gt;getValue('active');
                $row-&gt;level = $form-&gt;getValue('level');
                $result = $row-&gt;save();
//On gere le resultat et l'action qui s'en suit.
                $form-&gt;reset();
            }
        }
    }
}
</pre>
<p>Petit apercu avant de continuer</p>
<p style="text-align: center;"><a href="http://blog.lyrixx.info/wp-content/uploads/2009/11/Form-User-Add.png" rel="lightbox[929]"><img class="aligncenter size-full wp-image-938" style="border: 1px solid black;" title="Form User Add" src="http://blog.lyrixx.info/wp-content/uploads/2009/11/Form-User-Add.png" alt="Form User Add" width="370" height="571" /></a></p>
<pre class="brush: php;">$form = new Model_Form_User_User();
$this&gt;view-&gt;formUser = $form;</pre>
<p>On commence par <em>instancier</em> la classe du formulaire et on le donne à la vue. A partir de ce moment on peut <strong>déjà tester si notre formulaire s&#8217;affiche bien</strong>. Bien entendu ça ne sert a rien de cliquer sur envoyer, ça ne fonctionnera pas ! Comme on a pu le voir plus haut, la page de destination du formulaire est elle même. Donc le <em>controller</em> est le même. C&#8217;est donc dans la même <em>méthode</em> du même <em>controller</em> qu&#8217;on teste en premier si notre <strong>formulaire est valide</strong> et qu&#8217;ensuite on traite le résultat.</p>
<pre class="brush: php;">if ($this-&gt;_request-&gt;isPost()) {
     $formData = $this-&gt;_request-&gt;getPost();
}</pre>
<p>On commence avec le <em>IF</em> pour voir si il y a eu des données de type <em><strong>POST</strong></em>, <em>POST</em> étant le type d&#8217;envoi par défaut pour les formulaires. On peut bien entendu envoyer notre formulaire en <em><strong>GET</strong></em> en modifiant la classe <em>user.php</em>. Ensuite on récupère nos données.</p>
<pre class="brush: php;">if ($form-&gt;isValid($formData)) {
}</pre>
<p>Ce point est très intéressant, car il va <strong>automatiquement voir si notre formulaire est valide</strong>. C&#8217;est a dire qu&#8217;il va exécuter chaque <em>validateurs</em> de nos <em>élement</em> composant le formulaire. Si il y a <strong>au moins une erreur la validation ne passera pas</strong>, mais zf va<strong> automatiquement refaire notre formulaire en reprenant les valeurs insérer, et en ajouter un message ou il y a eu des erreurs</strong> (par exemple « la valeur est requise »). Ici encore on peut personnaliser le message. Dans mon cas j&#8217;utilise encore une fois la <em>traduction</em>. Bon et si le formulaire est valide ?</p>
<pre class="brush: php;"> $users = new Model_DbTable_Users();
$row = $users-&gt;createRow();
$row-&gt;nom = $form-&gt;getValue('nom');
$row-&gt;prenom = $form-&gt;getValue('prenom');
$row-&gt;email = $form-&gt;getValue('email');
$row-&gt;password = md5($form-&gt;getValue('password'));
$row-&gt;active = $form-&gt;getValue('active');
$row-&gt;level = $form-&gt;getValue('level');
$result = $row-&gt;save();</pre>
<p>Comme on veut (à la base) que notre formulaire nous serve à <strong>ajouter des utilisateurs en base</strong>, et bien on reprend le même code que dans le tutoriel sur la <em>gestion des BDD</em> ; On instancie la classe <em>Model_DbTable_Users</em>, <strong>on crée un nouvelle ligne, on ajoute tous nos champs</strong>, et enfin <strong>on sauvegarde</strong>. Bien entendu, on peut mettre la ligne <em>$row-&gt;save()</em> dans un bloque <em>try-catch</em>, mais si on a bien fait notre boulot sur les <em>validateurs</em>, normalement, il n&#8217;y a pas besoin.</p>
<pre class="brush: php;">$form-&gt;reset();</pre>
<p>Enfin on <strong>remet a zéro notre formulaire,</strong> c&#8217;est a dire qu&#8217;on vide tout les champs. On peut par la suite ajouter un message (pour l&#8217;ergonomie) qui s&#8217;affichera expliquant que l&#8217;ajout s&#8217;est bien effectué. Ici c&#8217;est donc juste un passage de variable à la vue. Voilà notre formulaire fonctionne mais il y reste encore des choses a voir.</p>
<h2 id='validateur'>Double vérification du password ; Validation avec données.</h2>
<p>Du fait qu&#8217;il faille vérifier que l&#8217;utilisateur a bien rentré <strong>deux fois le même </strong><em><strong>password</strong></em>, on va avoir besoin d&#8217;au moins un des deux <em>password</em>. On va donc redéfinir la méthode <em>isValid</em> de la classe <em>Model_Form_User_User</em> qui étend <em>Zend_Form </em>je vous rappel. Cette classe, comme on a vu plus haut, <strong>est systématiquement appelé</strong>, et elle appel à son tour tous les <em>validateurs</em> de tous les <em>éléments</em>. On va utiliser pour vérifier que l&#8217;utilisateur a bien rentré deux fois le même <em>password</em> grâce une classe de validation réalisé par <a href="http://pastie.textmate.org/640447">l&#8217;ami dator</a> :</p>
<pre class="brush: php;">class App_Validate_PasswordMatch extends Zend_Validate_Abstract
{
    const PASSWORD_MISMATCH = 'passwordMismatch';
    protected $_compare;
    protected $_messageTemplates = array(
        self::PASSWORD_MISMATCH =&gt; &quot;PASSWORD_MISMATCH&quot;
    );
    public function __construct($compare){
        $this-&gt;_compare = $compare;
    }
    public function isValid($value){
        $this-&gt;_setValue((string) $value);
        if ($value !== $this-&gt;_compare)  {
            $this-&gt;_error(self::PASSWORD_MISMATCH);
            return false;
        }
        return true;
    }
}</pre>
<p>On peut la mettre en bas de la classe <em>Model_Form_User_User</em>, ça ne pose pas de problème. Du coup il ne nous reste plus qu&#8217;a l&#8217;utiliser :</p>
<pre class="brush: php;">public function isValid($data)
	{
	    $this-&gt;getElement('password')-&gt;addValidator(new App_Validate_PasswordMatch($data['password2']));
		if ($this-&gt;getElement('email')-&gt;getValue() == $data['email']){
				$this-&gt;getElement('email')-&gt;removeValidator ( &quot;Zend_Validate_Db_NoRecordExists&quot; );
		}
	    return parent::isValid($data);
	}</pre>
<p>On commence par récupérer l&#8217;élément <em>password</em>, auquel on ajoute notre <em>validateur personnalisé</em> en lui donnée comme paramètre le <em>password2</em> rentré par l&#8217;utilisateur. Ensuite on appelle la méthode « classique ».</p>
<h2 id='conclusion'>Conclusion</h2>
<p>Et voilà, on a finit avec notre formulaire. On peut bien sur l&#8217;améliorer et surtout le rendre plus joli. Je vous redonnerai tous les fichiers nécessaires lors de la deuxième <img src='http://blog.lyrixx.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  et on peut continuer avec<a title="Zend Framework, Formulaire et Base de donnée, partie 2" href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-2/"> la 2eme partie : affichage, modification et suppression</a>.</p>
<p><strong >Articles en rapport : :</strong>
<ul class="similar-posts">
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-2/" rel="bookmark" title="20 novembre 2009">Zend Framework, Formulaire et Base de donnée, partie 2</a></li>
<li><a href="http://blog.lyrixx.info/zend/gerer-lauthentification-avec-zend_auth-du-zend-framework/" rel="bookmark" title="23 décembre 2009">Gerer l&#8217;authentification avec Zend_Auth du Zend Framework</a></li>
<li><a href="http://blog.lyrixx.info/zend-framework/" rel="bookmark" title="19 juin 2009">Zend Framework</a></li>
<li><a href="http://blog.lyrixx.info/zend/comment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool/" rel="bookmark" title="18 mars 2010">Comment bien démarrer un projet Zend Framework grâce aux Zend_Tool</a></li>
<li><a href="http://blog.lyrixx.info/zend/application-de-site-e-commerce/" rel="bookmark" title="18 mars 2010">Application de site E-Commerce [Code-Source]</a></li>
</ul>
<p><!-- Similar Posts took 9.550 ms --></p>



Et on peut meme partager l'article:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-1%2F&amp;partner=sociable" title="Print"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%201%20-%20http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-1%2F" title="Twitter"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-1%2F&amp;t=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%201" title="Facebook"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-1%2F&amp;title=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%201&amp;bodytext=%0D%0AHello%2C%0D%0AOn%20va%20voir%20aujourd%27hui%20comment%20construire%20et%20g%C3%A9rer%20un%20formulaire%2C%20ajouter%20les%20donn%C3%A9es%20r%C3%A9cup%C3%A9r%C3%A9%20dans%20une%20base%20de%20donn%C3%A9es%2C%20afficher%20ces%20donn%C3%A9es%2C%20et%20enfin%20modifier%20et%20supprimer%20celles-ci.%20En%20gros%2C%20on%20va%20utiliser%20les%20propri%C3%A9t%C3%A9s%20CRUD%20de" title="Digg"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-1%2F&amp;title=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%201&amp;notes=%0D%0AHello%2C%0D%0AOn%20va%20voir%20aujourd%27hui%20comment%20construire%20et%20g%C3%A9rer%20un%20formulaire%2C%20ajouter%20les%20donn%C3%A9es%20r%C3%A9cup%C3%A9r%C3%A9%20dans%20une%20base%20de%20donn%C3%A9es%2C%20afficher%20ces%20donn%C3%A9es%2C%20et%20enfin%20modifier%20et%20supprimer%20celles-ci.%20En%20gros%2C%20on%20va%20utiliser%20les%20propri%C3%A9t%C3%A9s%20CRUD%20de" title="del.icio.us"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-1%2F&amp;title=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%201&amp;annotation=%0D%0AHello%2C%0D%0AOn%20va%20voir%20aujourd%27hui%20comment%20construire%20et%20g%C3%A9rer%20un%20formulaire%2C%20ajouter%20les%20donn%C3%A9es%20r%C3%A9cup%C3%A9r%C3%A9%20dans%20une%20base%20de%20donn%C3%A9es%2C%20afficher%20ces%20donn%C3%A9es%2C%20et%20enfin%20modifier%20et%20supprimer%20celles-ci.%20En%20gros%2C%20on%20va%20utiliser%20les%20propri%C3%A9t%C3%A9s%20CRUD%20de" title="Google Bookmarks"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.netvibes.com/share?title=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%201&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-1%2F" title="Netvibes"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/netvibes.png" title="Netvibes" alt="Netvibes" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.blogospherenews.com/submit.php?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-1%2F&amp;title=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%201" title="Blogosphere News"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/blogospherenews.png" title="Blogosphere News" alt="Blogosphere News" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-1%2F" title="Identi.ca"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-1%2F&amp;title=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%201&amp;source=LyRiX+Blog+Tuto%2C+Zend%2C+Php%2C+Ajax%2C+web+2.0%2C+Flex%2C+Serveur%2C+Ubuntu%2C+Geek+%3A+Tout+ca+sur+un+blog&amp;summary=%0D%0AHello%2C%0D%0AOn%20va%20voir%20aujourd%27hui%20comment%20construire%20et%20g%C3%A9rer%20un%20formulaire%2C%20ajouter%20les%20donn%C3%A9es%20r%C3%A9cup%C3%A9r%C3%A9%20dans%20une%20base%20de%20donn%C3%A9es%2C%20afficher%20ces%20donn%C3%A9es%2C%20et%20enfin%20modifier%20et%20supprimer%20celles-ci.%20En%20gros%2C%20on%20va%20utiliser%20les%20propri%C3%A9t%C3%A9s%20CRUD%20de" title="LinkedIn"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-1%2F" title="Technorati"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.wikio.fr/vote?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-1%2F" title="Wikio FR"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/wikio.png" title="Wikio FR" alt="Wikio FR" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-1%2F&amp;submitHeadline=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%201&amp;submitSummary=%0D%0AHello%2C%0D%0AOn%20va%20voir%20aujourd%27hui%20comment%20construire%20et%20g%C3%A9rer%20un%20formulaire%2C%20ajouter%20les%20donn%C3%A9es%20r%C3%A9cup%C3%A9r%C3%A9%20dans%20une%20base%20de%20donn%C3%A9es%2C%20afficher%20ces%20donn%C3%A9es%2C%20et%20enfin%20modifier%20et%20supprimer%20celles-ci.%20En%20gros%2C%20on%20va%20utiliser%20les%20propri%C3%A9t%C3%A9s%20CRUD%20de&amp;submitCategory=science&amp;submitAssetType=text" title="Yahoo! Buzz"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/yahoobuzz.png" title="Yahoo! Buzz" alt="Yahoo! Buzz" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://ping.fm/ref/?link=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fzend-framework-formulaire-et-base-de-donnee-partie-1%2F&amp;title=Zend%20Framework%2C%20Formulaire%20et%20Base%20de%20donn%C3%A9e%2C%20partie%201&amp;body=%0D%0AHello%2C%0D%0AOn%20va%20voir%20aujourd%27hui%20comment%20construire%20et%20g%C3%A9rer%20un%20formulaire%2C%20ajouter%20les%20donn%C3%A9es%20r%C3%A9cup%C3%A9r%C3%A9%20dans%20une%20base%20de%20donn%C3%A9es%2C%20afficher%20ces%20donn%C3%A9es%2C%20et%20enfin%20modifier%20et%20supprimer%20celles-ci.%20En%20gros%2C%20on%20va%20utiliser%20les%20propri%C3%A9t%C3%A9s%20CRUD%20de" title="Ping.fm"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/ping.png" title="Ping.fm" alt="Ping.fm" class="sociable-hovers" /></a>


<br/><br/><br /><hr />
<p><small>Auteur : © Greg pour <a href="http://blog.lyrixx.info">LyRiX Blog</a>.
<br /><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/">Article</a> publié le :  19-11-2009, dans : <a href="http://blog.lyrixx.info/category/zend/" title="Voir tous les articles dans Zend Framework" rel="category tag">Zend Framework</a>.
<a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/">Liens direct vers l'article (permalink) </a>
<br/>Mot Clé : <a href="http://blog.lyrixx.info/tag/bootstrap/" rel="tag">Bootstrap</a>, <a href="http://blog.lyrixx.info/tag/controller/" rel="tag">Controller</a>, <a href="http://blog.lyrixx.info/tag/model/" rel="tag">Model</a>, <a href="http://blog.lyrixx.info/tag/mysql/" rel="tag">Mysql</a>, <a href="http://blog.lyrixx.info/tag/view/" rel="tag">View</a>, <a href="http://blog.lyrixx.info/tag/zend-framework/" rel="tag">Zend Framework</a>, <a href="http://blog.lyrixx.info/tag/zend_db/" rel="tag">Zend_Db</a>, <a href="http://blog.lyrixx.info/tag/zend_form/" rel="tag">Zend_Form</a>, <a href="http://blog.lyrixx.info/tag/zend_translate/" rel="tag">Zend_Translate</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		</item>
		<item>
		<title>Résoudre le bug entre Zend Studio 7 et Ubuntu 9.10</title>
		<link>http://blog.lyrixx.info/zend/resoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10/</link>
		<comments>http://blog.lyrixx.info/zend/resoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 14:07:32 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Bouton]]></category>
		<category><![CDATA[Gui]]></category>
		<category><![CDATA[HotFix]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Zend Studio]]></category>

		<guid isPermaLink="false">http://blog.lyrixx.info/?p=916</guid>
		<description><![CDATA[Comme certains ont pu le voir, il y a des petits problèmes entre Zend Studio 7 (7.1 chez moi) et Ubuntu 9.10 (karmic koala). En effet il y a des problèmes avec les boutons (GUI &#8211; Interface utilisateur graphique), certains ne sont pas cliquable, ils ne fonctionnent pas. De plus, lorsqu&#8217;on clique sur le bouton, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.lyrixx.info/wp-content/uploads/2009/11/zend-studio-for-eclipse-debat-ide.png" alt="zend studio for eclipse ide" title="zend studio for eclipse ide" width="675" height="150" class="aligncenter size-full wp-image-926" /><br />
Comme certains ont pu le voir, il y a des <strong>petits problèmes entre Zend Studio 7</strong> (7.1 chez moi) et <strong>Ubuntu 9.10 (karmic koala</strong>). En effet il y a des problèmes avec les <strong>boutons (GUI &#8211; Interface utilisateur graphique)</strong>, certains ne sont pas cliquable, ils ne fonctionnent pas. De plus, lorsqu&#8217;on clique sur le bouton, celui-ci apparaît <em>comme cliqué</em>, mais rien ne se passe. J&#8217;avais trouvé un petit tips qui consiste à appuyer sur la touche entrée du clavier, mais ce n&#8217;est pas terrible. La je vous propose un <strong>petit script pour résoudre ce problème (en une ligne)</strong> :<br />
<span id="more-916"></span></p>
<ul>
<li> Soit on lance Zend studio en ligne de commande :</li>
</ul>
<pre class="brush: bash;">GDK_NATIVE_WINDOWS=1 ./ZendStudio</pre>
<ul>
<li> Soit on se fait un petit script :</li>
</ul>
<pre class="brush: bash;">#!/bin/bash
export GDK_NATIVE_WINDOWS=1
/usr/local/Zend/ZendStudio-7.1.0/ZendStudio '$@'</pre>
<p>Pensez a remplacer votre path (chemin) vers le lanceur de zend.</p>
<p>Pour les puristes, le problème vient d&#8217;une<strong> incompatibilité entre les libraires GTK et SWT utilisées dans Eclipse 3.5.x et Ubuntu 9.10</strong>.</p>
<p><a href="http://kb.zend.com/index.php?View=entry&amp;EntryID=435" target="_blank">source</a></p>
<p><strong >Articles en rapport : :</strong>
<ul class="similar-posts">
<li><a href="http://blog.lyrixx.info/ubuntu/comment-resoudre-les-conflits-entre-vnc-et-compiz-fusion/" rel="bookmark" title="20 octobre 2009">Comment résoudre les conflits entre VNC et Compiz Fusion</a></li>
<li><a href="http://blog.lyrixx.info/ubuntu/installation-et-parametrage-dun-serveur-home-sous-linux-ubuntu-partie-2/" rel="bookmark" title="24 septembre 2009">Installation et parametrage d&#8217;un serveur @home sous linux ubuntu &#8211; partie 2</a></li>
<li><a href="http://blog.lyrixx.info/blog/comment-passer-de-wp-codebox-a-syntax-highlighter/" rel="bookmark" title="28 décembre 2009">Comment passer de WP-codebox à Syntax Highlighter ?</a></li>
<li><a href="http://blog.lyrixx.info/internet/des-liens-en-vrac/" rel="bookmark" title="12 novembre 2009">Des liens en vrac</a></li>
<li><a href="http://blog.lyrixx.info/zend/retour-sur-zend-studio-7-beta/" rel="bookmark" title="8 juillet 2009">Retour sur Zend Studio 7 beta</a></li>
</ul>
<p><!-- Similar Posts took 6.583 ms --></p>



Et on peut meme partager l'article:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fresoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10%2F&amp;partner=sociable" title="Print"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=R%C3%A9soudre%20le%20bug%20entre%20Zend%20Studio%207%20et%20Ubuntu%209.10%20-%20http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fresoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10%2F" title="Twitter"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fresoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10%2F&amp;t=R%C3%A9soudre%20le%20bug%20entre%20Zend%20Studio%207%20et%20Ubuntu%209.10" title="Facebook"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fresoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10%2F&amp;title=R%C3%A9soudre%20le%20bug%20entre%20Zend%20Studio%207%20et%20Ubuntu%209.10&amp;bodytext=%0D%0AComme%20certains%20ont%20pu%20le%20voir%2C%20il%20y%20a%20des%20petits%20probl%C3%A8mes%20entre%20Zend%20Studio%207%20%287.1%20chez%20moi%29%20et%20Ubuntu%209.10%20%28karmic%20koala%29.%20En%20effet%20il%20y%20a%20des%20probl%C3%A8mes%20avec%20les%20boutons%20%28GUI%20-%20Interface%20utilisateur%20graphique%29%2C%20certains%20ne%20sont%20pas%20cliquable%2C%20i" title="Digg"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fresoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10%2F&amp;title=R%C3%A9soudre%20le%20bug%20entre%20Zend%20Studio%207%20et%20Ubuntu%209.10&amp;notes=%0D%0AComme%20certains%20ont%20pu%20le%20voir%2C%20il%20y%20a%20des%20petits%20probl%C3%A8mes%20entre%20Zend%20Studio%207%20%287.1%20chez%20moi%29%20et%20Ubuntu%209.10%20%28karmic%20koala%29.%20En%20effet%20il%20y%20a%20des%20probl%C3%A8mes%20avec%20les%20boutons%20%28GUI%20-%20Interface%20utilisateur%20graphique%29%2C%20certains%20ne%20sont%20pas%20cliquable%2C%20i" title="del.icio.us"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fresoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10%2F&amp;title=R%C3%A9soudre%20le%20bug%20entre%20Zend%20Studio%207%20et%20Ubuntu%209.10&amp;annotation=%0D%0AComme%20certains%20ont%20pu%20le%20voir%2C%20il%20y%20a%20des%20petits%20probl%C3%A8mes%20entre%20Zend%20Studio%207%20%287.1%20chez%20moi%29%20et%20Ubuntu%209.10%20%28karmic%20koala%29.%20En%20effet%20il%20y%20a%20des%20probl%C3%A8mes%20avec%20les%20boutons%20%28GUI%20-%20Interface%20utilisateur%20graphique%29%2C%20certains%20ne%20sont%20pas%20cliquable%2C%20i" title="Google Bookmarks"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.netvibes.com/share?title=R%C3%A9soudre%20le%20bug%20entre%20Zend%20Studio%207%20et%20Ubuntu%209.10&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fresoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10%2F" title="Netvibes"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/netvibes.png" title="Netvibes" alt="Netvibes" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.blogospherenews.com/submit.php?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fresoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10%2F&amp;title=R%C3%A9soudre%20le%20bug%20entre%20Zend%20Studio%207%20et%20Ubuntu%209.10" title="Blogosphere News"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/blogospherenews.png" title="Blogosphere News" alt="Blogosphere News" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fresoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10%2F" title="Identi.ca"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fresoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10%2F&amp;title=R%C3%A9soudre%20le%20bug%20entre%20Zend%20Studio%207%20et%20Ubuntu%209.10&amp;source=LyRiX+Blog+Tuto%2C+Zend%2C+Php%2C+Ajax%2C+web+2.0%2C+Flex%2C+Serveur%2C+Ubuntu%2C+Geek+%3A+Tout+ca+sur+un+blog&amp;summary=%0D%0AComme%20certains%20ont%20pu%20le%20voir%2C%20il%20y%20a%20des%20petits%20probl%C3%A8mes%20entre%20Zend%20Studio%207%20%287.1%20chez%20moi%29%20et%20Ubuntu%209.10%20%28karmic%20koala%29.%20En%20effet%20il%20y%20a%20des%20probl%C3%A8mes%20avec%20les%20boutons%20%28GUI%20-%20Interface%20utilisateur%20graphique%29%2C%20certains%20ne%20sont%20pas%20cliquable%2C%20i" title="LinkedIn"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fresoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10%2F" title="Technorati"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.wikio.fr/vote?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fresoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10%2F" title="Wikio FR"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/wikio.png" title="Wikio FR" alt="Wikio FR" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fresoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10%2F&amp;submitHeadline=R%C3%A9soudre%20le%20bug%20entre%20Zend%20Studio%207%20et%20Ubuntu%209.10&amp;submitSummary=%0D%0AComme%20certains%20ont%20pu%20le%20voir%2C%20il%20y%20a%20des%20petits%20probl%C3%A8mes%20entre%20Zend%20Studio%207%20%287.1%20chez%20moi%29%20et%20Ubuntu%209.10%20%28karmic%20koala%29.%20En%20effet%20il%20y%20a%20des%20probl%C3%A8mes%20avec%20les%20boutons%20%28GUI%20-%20Interface%20utilisateur%20graphique%29%2C%20certains%20ne%20sont%20pas%20cliquable%2C%20i&amp;submitCategory=science&amp;submitAssetType=text" title="Yahoo! Buzz"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/yahoobuzz.png" title="Yahoo! Buzz" alt="Yahoo! Buzz" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://ping.fm/ref/?link=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fresoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10%2F&amp;title=R%C3%A9soudre%20le%20bug%20entre%20Zend%20Studio%207%20et%20Ubuntu%209.10&amp;body=%0D%0AComme%20certains%20ont%20pu%20le%20voir%2C%20il%20y%20a%20des%20petits%20probl%C3%A8mes%20entre%20Zend%20Studio%207%20%287.1%20chez%20moi%29%20et%20Ubuntu%209.10%20%28karmic%20koala%29.%20En%20effet%20il%20y%20a%20des%20probl%C3%A8mes%20avec%20les%20boutons%20%28GUI%20-%20Interface%20utilisateur%20graphique%29%2C%20certains%20ne%20sont%20pas%20cliquable%2C%20i" title="Ping.fm"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/ping.png" title="Ping.fm" alt="Ping.fm" class="sociable-hovers" /></a>


<br/><br/><br /><hr />
<p><small>Auteur : © Greg pour <a href="http://blog.lyrixx.info">LyRiX Blog</a>.
<br /><a href="http://blog.lyrixx.info/zend/resoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10/">Article</a> publié le :  12-11-2009, dans : <a href="http://blog.lyrixx.info/category/zend/" title="Voir tous les articles dans Zend Framework" rel="category tag">Zend Framework</a>.
<a href="http://blog.lyrixx.info/zend/resoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10/">Liens direct vers l'article (permalink) </a>
<br/>Mot Clé : <a href="http://blog.lyrixx.info/tag/bouton/" rel="tag">Bouton</a>, <a href="http://blog.lyrixx.info/tag/gui/" rel="tag">Gui</a>, <a href="http://blog.lyrixx.info/tag/hotfix/" rel="tag">HotFix</a>, <a href="http://blog.lyrixx.info/tag/ubuntu/" rel="tag">Ubuntu</a>, <a href="http://blog.lyrixx.info/tag/zend-studio/" rel="tag">Zend Studio</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.lyrixx.info/zend/resoudre-le-bug-entre-zend-studio-7-et-ubuntu-9-10/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Comment gérer une base de donnée avec le Zend Frameworkls</title>
		<link>http://blog.lyrixx.info/zend/comment-gerer-une-base-de-donnee-avec-le-zend-framework/</link>
		<comments>http://blog.lyrixx.info/zend/comment-gerer-une-base-de-donnee-avec-le-zend-framework/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 10:30:28 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[CRUD]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[Zend_Db]]></category>

		<guid isPermaLink="false">http://blog.lyrixx.info/?p=805</guid>
		<description><![CDATA[Alors la on va aborder un chapitre très important. Les bases de données sont bien sur très importantes pour un site web ou un service web. On va voir ensemble comment ajouter, modifier, supprimer des enregistrements (ou tuples) dans un table, dans une base de donnée. On va donc utiliser la gestion CRUD du Zend [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.lyrixx.info/wp-content/uploads/2009/10/database.png" alt="database" title="database" width="675" height="146" class="aligncenter size-full wp-image-827" /><br />
Alors la on va aborder un chapitre très important. <strong>Les bases de données sont bien sur très importantes</strong> pour un site web ou un service web. On va voir ensemble comment <strong>ajouter, modifier, supprimer des enregistrements (ou tuples) dans un table, dans une base de donnée</strong>. On va donc utiliser la gestion <strong>CRUD du Zend Framework 1.9</strong>.<br />
<span id="more-805"></span></p>
<h2 id='sommaire'>Sommaire</h2>
<ul>
<li><a href="#sommaire">Sommaire</a></li>
<li><a href="#connection">Connexion a la base de donnée</a></li>
<li><a href="#schemas">Schémas de la table</a></li>
<li><a href="#metier">Préparation de la classe métier</a></li>
<li><a href="#read">Obtenir et récupérer des enregistrements</a></li>
<li><a href="#create">Ajouter des enregistrements</a></li>
<li><a href="#update">Modifier des enregistrements</a></li>
<li><a href="#delete">Supprimer des enregistrement</a></li>
<li><a href="#extend">Etendre la classe métier</a></li>
<li><a href="#conclusion">Conclusion</a></li>
</ul>
<h2 id='connection'>Connexion a la base de donnée.</h2>
<p><strong>La connexion à la base de donnée principale se fait toute seule</strong>. Je m&#8217;explique, c&#8217;est le <strong>bootstrap qui va initialiser notre connexion à la base de donnée.</strong> En fait le <em>bootstrap</em> va charger le fichier de <strong>configuration de l&#8217;application</strong> et c&#8217;est dans ce fichier que l&#8217;on va définir les paramètres de  connexion a la <em>BDD</em>. Il faut donc éditer le fichier <em>application/configs/application.ini</em></p>
<pre class="brush: plain;">; DATABASE
resources.db.adapter = &quot;MYSQLI&quot;
resources.db.params.host = &quot;localhost&quot;
resources.db.params.username = &quot;budget&quot;
resources.db.params.password = &quot;budget&quot;
resources.db.params.dbname = &quot;budget&quot;
resources.db.params.date_format = &quot;YYYY-MM-ddTHH:mm:ss&quot;
resources.db.isDefaultTableAdapter = true</pre>
<p>Si on veut que notre connexion à la <em>BDD</em> soit géré automatiquement, le schémas (ci dessus) est très rigide. En effet <em><strong>zend</strong></em> va chercher automatiquement si dans le <em>fichier de configuration</em> il y a des constantes «<em> ressources.db.*</em> » de défini, et si oui il va essayé de se connecter à la base de donnée. Il est bien sur possible d&#8217;avoir plusieurs connexions à différente <em>SGBD</em> (<em><strong>mysql, orable, DB2</strong></em> …).<br />
Si vous utiliser <em><strong>mysql</strong></em>, il suffit de copier / coller le schémas ci dessus, et de bien remplacer les lignes : <em>host</em>, <em>username</em>, <em>password </em>et <em>dbname</em> qui signifie respectivement : hôte, nom d&#8217;utilisateur, mot de passe, nom de la BDD. Sinon l&#8217;<em>adpater</em> est le <em>driver</em> à utiliser pour se connecter (<em>mysql</em>, <em>orable</em>, <em>DB2</em>&#8230; ; se référer a la doc) ; <em>date_format</em> est le format de la date ; et <em>isDefaultTableAdapter</em> est pour savoir si cette connexion est la principale.</p>
<h2 id='schemas'>Schémas de la table</h2>
<p>On va utiliser un exemple pour bien mettre en place ce tuto. On va utiliser une table d&#8217;utilisateur. Voilà le schémas :</p>
<pre class="brush: sql;">CREATE TABLE IF NOT EXISTS `users` (
  id int(50) NOT NULL auto_increment,
  `name` varchar(50) NOT NULL,
  firstname varchar(50) NOT NULL,
  email varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  phonenumber varchar(20) NOT NULL,
  `enable` int(1) NOT NULL,
  `level` int(1) NOT NULL,
  PRIMARY KEY  (id),
  UNIQUE KEY email (email)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;</pre>
<p style="margin-bottom: 0cm;">On a donc :</p>
<ul>
<li>Un id en auto-increment</li>
<li>Un nom</li>
<li>Un prénom</li>
<li>Une adresse email</li>
<li>Un mot de passe</li>
<li>Un numéro de téléphone</li>
<li>Un booléen pour savoir si 	l&#8217;utilisateur est activé</li>
<li>Un entier pour avoir le niveau d&#8217;administration</li>
<li>Une clé primaire et un index sur 	l&#8217;id</li>
<li>Une clé unique et un index sur l&#8217;email</li>
</ul>
<h2 id='metier'>Préparation de la classe métier.</h2>
<p><em>Zend</em> commence à gérer de façon assez <strong>autonome et automatique les BDD</strong>. Il y a maintenant un gestionnaire <em><strong>CRUD</strong></em> (<em>Create</em>, <em>Read</em>, <em>Update</em>, <em>Delete </em>=&gt; Ajouter, Lire, Mettre a jour, Supprimer des enregistrements). Pour se faire il faut créer une <em>class</em> php. On est assez libre pour le nom des <em>class</em> et pour leurs emplacements, mais je vous recommanderai d&#8217;être assez <strong>logique et rigoureux</strong>. En fait il va falloir <strong>faire une </strong><em><strong>class</strong></em><strong> par table de votre base de donnée</strong>. Pour ma part, je mets presque toujours un « s » a la fin du nom de mes tables, car elles contiennent plusieurs enregistrements. Par exemple la table <em>users</em> contient plusieurs utilisateurs. Il faut maintenant créer une class qui représente cette table. On peut organiser ses <em>class</em> comme on veut, mais en général sur le petits projets je mets toutes mes <em>class</em> dans le dossier <em>application/models/DbTable/</em>. De plus je nomme toujours ma class avec le même nom que la table. A quoi doit ressembler la <em>class</em> (<a href="http://blog.lyrixx.info/zend/zend-comment-utiliser-un-model/" title="Zend : Comment utiliser un model ?" >Voir la convention de nommage des <em>models</em></a>) :</p>
<pre class="brush: php;">&lt;?php
class Model_DbTable_Users extends Zend_Db_Table {
	protected $_name = 'users';
}</pre>
<p>Pour le nom de la <em>class</em>, il faut se référer au model dans le Zend Framework. Il faut étendre la <em><strong>class  Zend_Db_Table</strong></em>. Enfin il faut ajouter l&#8217;attribut <em><strong>protected $_name</strong></em> qui a pour valeur le <strong>nom de la table dans la base de donnée</strong>. Et voilà, le plus dur est fait. On a maintenant une <em>class</em> qui possède un bon nombre de méthode <em>CRUD</em>.</p>
<h2 id='read'>Obtenir et récupérer des enregistrements</h2>
<p><strong>Comment obtenir tous les tuples d&#8217;une table ?</strong> Si il n&#8217;y a pas de close particulières, c&#8217;est super simple , on exécute le petit bout de code suivant :</p>
<pre class="brush: php;">private function getUsersAll() {
	$dbUser = new Model_DbTable_Users();
	return $dbUser-&gt;fetchAll()-&gt;toArray();
}</pre>
<p>Donc on instancie un nouveau <em>Model_DbTable_Users</em>, et on lui demande la retourner tous les enregistrements grâce a la méthode <em>fetchAll</em>, et enfin on convertit le résultats en tableau. Voilà le tours est joué !<br />
<strong>Comment obtenir que certains enregistrements ?</strong></p>
<pre class="brush: php;">private function getUsersByName($name = '') {
	$dbUser = new Model_DbTable_Users();
	return $dbUser-&gt;fetchAll()-&gt;toArray(array('name = ?'=&gt; $name));
}</pre>
<p>Voilà, la méthode <em>fetchAll</em> possède 4 arguments: <em>$where,$order</em>,<em>$count</em>,<em>$offset</em> qui représente respectivement la clause <em>where</em><span style="font-style: normal;">, le clause </span><em>order by</em><span style="font-style: normal;">, et la clause </span><em>limit</em> (combien d&#8217;enregistrement et à partir de l&#8217;enregistrement numéro n ). Pour une utilisation plus poussé, je vous recommande de lire la doc du Zend Framework.</p>
<h2 id='create'>Ajouter un enregistrement</h2>
<p><strong>Comment ajouter un enregistrement dans la base de donnée ?</strong> Comme dans l&#8217;exemple précédant, on va ajouter un nouvel utilisateur.</p>
<pre class="brush: php;">$users = new Model_DbTable_Users();
$row = $users-&gt;createRow();
$row-&gt;name = 'Nom';
$row-&gt;firstname = 'Prenom';
$row-&gt;email = 'email';
$row-&gt;password = md5('password');
$row-&gt;phonenumber = '0102030405';
$row-&gt;enable = 1;
$row-&gt;level = 9;
$result = $row-&gt;save();</pre>
<p>On commence par instanciée un nouveau <em>Model_DbTable_Users</em>. Ensuite on crée une ligne, puis on ajoute a cette ligne les différents attributs, et enfin on sauvegarde cette ligne en table.<br />
On peut aussi faire la même chose en donnant a la méthode <em>createRow</em> un tableau en argument. :</p>
<pre class="brush: php;">$users = new Model_DbTable_Users();
$datas = array(
	'name'=&gt;'Nom',
	'firstname'=&gt;'Prenom',
	'email'=&gt;'email2',
	'password'=&gt;md5('password'),
	'phonenumber'=&gt;'0102030405',
	'enable'=&gt;1,
	'level'=&gt;9,
);
$row = $users-&gt;createRow($datas);
$row-&gt;save();</pre>
<p><strong>Enfin on peut faire beaucoup plus simple</strong>. Je ne connais pas bien la différence entre les deux méthodes (la précédente et la suivante), si quelqu&#8217;un peut m&#8217;éclairer, je suis preneur.</p>
<pre class="brush: php;">$users = new Model_DbTable_Users();
$datas = array(
	'name'=&gt;'Nom',
	'firstname'=&gt;'Prenom',
	'email'=&gt;'email3',
	'password'=&gt;md5('password'),
	'phonenumber'=&gt;'0102030405',
	'enable'=&gt;1,
	'level'=&gt;9,
);
$row = $users-&gt;insert($datas);</pre>
<p>Bon, c&#8217;est assez simple d&#8217;ajouter un enregistrement en table ? On va un peu plus loin. Comment <strong>protéger ses enregistrements en table grâce a une </strong><em><strong>transaction SQL</strong></em> :</p>
<pre class="brush: php;">$users = new Model_DbTable_Users();
$datas = array(
	'name'=&gt;'Nom',
	'firstname'=&gt;'Prenom',
	'email'=&gt;'email3',
	'password'=&gt;md5('password'),
	'phonenumber'=&gt;'0102030405',
	'enable'=&gt;1,
	'level'=&gt;9,
);
$defaultAdaptateur = Zend_Db_Table::getDefaultAdapter();
$defaultAdaptateur-&gt;beginTransaction();
try {
	$defaultAdaptateur-&gt;insert('users', $datas);
	$defaultAdaptateur-&gt;commit();
} catch (Exception $e) {
	$defaultAdaptateur-&gt;rollBack();
	echo $e-&gt;getMessage();
}</pre>
<p>On commence de la même façon que pour la dernière méthode. Ensuite on récupère l&#8217;<em>adaptateur</em> de  la base de donnée principale puis on commence une <em>transaction</em>. Il faut ensuite en-capsuler notre ajout à la base dans un bloque <em><span style="font-weight: normal;">try-catch</span></em>. On essaye d&#8217;insérer notre enregistrement puis si ça fonctionne on <em>commit</em>. Si ça ne fonctionne pas on fait un <em>rollback </em>et on affiche les messages. <strong>Bien sur il est possible de n&#8217;utiliser qu&#8217;un bloque try-catch</strong>.</p>
<h2 id='update'>Mettre a jour un enregistrement</h2>
<p>La méthode ici est très similaire à l&#8217;ajout d&#8217;un enregistrement. On peut mettre a jour uniquement qu&#8217;une seule ligne ou tout un groupes de ligne. Dans cet exemple on remplace tous les enregistrements ou l&#8217;attribut name est « Nom » par « Nom2 ».</p>
<pre class="brush: php;">$users = new Model_DbTable_Users();
$datas = array('name'=&gt;'Nom2');
$users-&gt;update($datas,array('name = ?'=&gt;'Nom'));
$this-&gt;render('index');</pre>
<p>Ici les <em>$datas</em> sont les données qu&#8217;on va mettre a jour. La méthode <em>updates </em>va tout faire. Le premier arguments est le <strong>tableau de donnée</strong>, le second argument correspond aux <strong>conditions de la clause </strong><em><strong>where</strong></em>. Dans ce cas la on explicite que l&#8217;attribut name doit correspondre a Nom.</p>
<h2 id='delete'>Supprimer un enregistrement</h2>
<p>Cette dernier action est la plus simple, il suffit de <strong>bien formuler la clause </strong><em><strong>where</strong></em>.</p>
<pre class="brush: php;">$users = new Model_DbTable_Users();
$users-&gt;delete(array('name = ?'=&gt;'Nom2'));</pre>
<p>Ici on supprimer tous les utilisateurs qui ont pour valeur d&#8217;attribut name : Nom2.</p>
<h2 id='extend'>Extension de la class métier</h2>
<p>Bien entendu, on peut ajouter des méthodes particulières a notre <em>class</em> métier. Comme par exemple pour avoir le nombre d&#8217;enregistrement :</p>
<pre class="brush: php;">public function getUserCount(){
	$sql = 'select count(1) cnt from users';
	$stmt = $this-&gt;_db-&gt;query($sql);
	$results = $stmt-&gt;fetchAll();
	if ((sizeof($results) &gt; 0) &amp;&amp; (isset($results[0]['cnt']))) {
		return $results[0]['cnt'];
	}
	throw new Exception(&quot;Erreur : impossible d'obtenir le nombre d'utilisateur&quot;);
}</pre>
<h2 id='conclusion'>Conclusion</h2>
<p>On peut bien sur en-capsuler un update, une suppression dans un block try-catch et de plus on est pas obligé d&#8217;utiliser les transaction sql qui sont quand même plus lourde. On verra dans un prochain tuto comme utiliser les clés étrangères.<br />
[<a href="http://farm2.static.flickr.com/1296/533233247_b6baa30fdb.jpg" rel="lightbox[805]">header</a>]</p>
<p><strong >Articles en rapport : :</strong>
<ul class="similar-posts">
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-2/" rel="bookmark" title="20 novembre 2009">Zend Framework, Formulaire et Base de donnée, partie 2</a></li>
<li><a href="http://blog.lyrixx.info/zend/gerer-lauthentification-avec-zend_auth-du-zend-framework/" rel="bookmark" title="23 décembre 2009">Gerer l&#8217;authentification avec Zend_Auth du Zend Framework</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-framework-formulaire-et-base-de-donnee-partie-1/" rel="bookmark" title="19 novembre 2009">Zend Framework, Formulaire et Base de donnée, partie 1</a></li>
<li><a href="http://blog.lyrixx.info/zend/application-de-site-e-commerce/" rel="bookmark" title="18 mars 2010">Application de site E-Commerce [Code-Source]</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-comment-utiliser-un-model/" rel="bookmark" title="27 juin 2009">Zend : Comment utiliser un model ?</a></li>
</ul>
<p><!-- Similar Posts took 8.451 ms --></p>



Et on peut meme partager l'article:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-gerer-une-base-de-donnee-avec-le-zend-framework%2F&amp;partner=sociable" title="Print"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Comment%20g%C3%A9rer%20une%20base%20de%20donn%C3%A9e%20avec%20le%20Zend%20Frameworkls%20-%20http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-gerer-une-base-de-donnee-avec-le-zend-framework%2F" title="Twitter"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-gerer-une-base-de-donnee-avec-le-zend-framework%2F&amp;t=Comment%20g%C3%A9rer%20une%20base%20de%20donn%C3%A9e%20avec%20le%20Zend%20Frameworkls" title="Facebook"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-gerer-une-base-de-donnee-avec-le-zend-framework%2F&amp;title=Comment%20g%C3%A9rer%20une%20base%20de%20donn%C3%A9e%20avec%20le%20Zend%20Frameworkls&amp;bodytext=%0D%0AAlors%20la%20on%20va%20aborder%20un%20chapitre%20tr%C3%A8s%20important.%20Les%20bases%20de%20donn%C3%A9es%20sont%20bien%20sur%20tr%C3%A8s%20importantes%20pour%20un%20site%20web%20ou%20un%20service%20web.%20On%20va%20voir%20ensemble%20comment%20ajouter%2C%20modifier%2C%20supprimer%20des%20enregistrements%20%28ou%20tuples%29%20dans%20un%20table%2C%20da" title="Digg"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-gerer-une-base-de-donnee-avec-le-zend-framework%2F&amp;title=Comment%20g%C3%A9rer%20une%20base%20de%20donn%C3%A9e%20avec%20le%20Zend%20Frameworkls&amp;notes=%0D%0AAlors%20la%20on%20va%20aborder%20un%20chapitre%20tr%C3%A8s%20important.%20Les%20bases%20de%20donn%C3%A9es%20sont%20bien%20sur%20tr%C3%A8s%20importantes%20pour%20un%20site%20web%20ou%20un%20service%20web.%20On%20va%20voir%20ensemble%20comment%20ajouter%2C%20modifier%2C%20supprimer%20des%20enregistrements%20%28ou%20tuples%29%20dans%20un%20table%2C%20da" title="del.icio.us"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-gerer-une-base-de-donnee-avec-le-zend-framework%2F&amp;title=Comment%20g%C3%A9rer%20une%20base%20de%20donn%C3%A9e%20avec%20le%20Zend%20Frameworkls&amp;annotation=%0D%0AAlors%20la%20on%20va%20aborder%20un%20chapitre%20tr%C3%A8s%20important.%20Les%20bases%20de%20donn%C3%A9es%20sont%20bien%20sur%20tr%C3%A8s%20importantes%20pour%20un%20site%20web%20ou%20un%20service%20web.%20On%20va%20voir%20ensemble%20comment%20ajouter%2C%20modifier%2C%20supprimer%20des%20enregistrements%20%28ou%20tuples%29%20dans%20un%20table%2C%20da" title="Google Bookmarks"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.netvibes.com/share?title=Comment%20g%C3%A9rer%20une%20base%20de%20donn%C3%A9e%20avec%20le%20Zend%20Frameworkls&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-gerer-une-base-de-donnee-avec-le-zend-framework%2F" title="Netvibes"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/netvibes.png" title="Netvibes" alt="Netvibes" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.blogospherenews.com/submit.php?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-gerer-une-base-de-donnee-avec-le-zend-framework%2F&amp;title=Comment%20g%C3%A9rer%20une%20base%20de%20donn%C3%A9e%20avec%20le%20Zend%20Frameworkls" title="Blogosphere News"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/blogospherenews.png" title="Blogosphere News" alt="Blogosphere News" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-gerer-une-base-de-donnee-avec-le-zend-framework%2F" title="Identi.ca"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-gerer-une-base-de-donnee-avec-le-zend-framework%2F&amp;title=Comment%20g%C3%A9rer%20une%20base%20de%20donn%C3%A9e%20avec%20le%20Zend%20Frameworkls&amp;source=LyRiX+Blog+Tuto%2C+Zend%2C+Php%2C+Ajax%2C+web+2.0%2C+Flex%2C+Serveur%2C+Ubuntu%2C+Geek+%3A+Tout+ca+sur+un+blog&amp;summary=%0D%0AAlors%20la%20on%20va%20aborder%20un%20chapitre%20tr%C3%A8s%20important.%20Les%20bases%20de%20donn%C3%A9es%20sont%20bien%20sur%20tr%C3%A8s%20importantes%20pour%20un%20site%20web%20ou%20un%20service%20web.%20On%20va%20voir%20ensemble%20comment%20ajouter%2C%20modifier%2C%20supprimer%20des%20enregistrements%20%28ou%20tuples%29%20dans%20un%20table%2C%20da" title="LinkedIn"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-gerer-une-base-de-donnee-avec-le-zend-framework%2F" title="Technorati"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.wikio.fr/vote?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-gerer-une-base-de-donnee-avec-le-zend-framework%2F" title="Wikio FR"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/wikio.png" title="Wikio FR" alt="Wikio FR" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-gerer-une-base-de-donnee-avec-le-zend-framework%2F&amp;submitHeadline=Comment%20g%C3%A9rer%20une%20base%20de%20donn%C3%A9e%20avec%20le%20Zend%20Frameworkls&amp;submitSummary=%0D%0AAlors%20la%20on%20va%20aborder%20un%20chapitre%20tr%C3%A8s%20important.%20Les%20bases%20de%20donn%C3%A9es%20sont%20bien%20sur%20tr%C3%A8s%20importantes%20pour%20un%20site%20web%20ou%20un%20service%20web.%20On%20va%20voir%20ensemble%20comment%20ajouter%2C%20modifier%2C%20supprimer%20des%20enregistrements%20%28ou%20tuples%29%20dans%20un%20table%2C%20da&amp;submitCategory=science&amp;submitAssetType=text" title="Yahoo! Buzz"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/yahoobuzz.png" title="Yahoo! Buzz" alt="Yahoo! Buzz" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://ping.fm/ref/?link=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fcomment-gerer-une-base-de-donnee-avec-le-zend-framework%2F&amp;title=Comment%20g%C3%A9rer%20une%20base%20de%20donn%C3%A9e%20avec%20le%20Zend%20Frameworkls&amp;body=%0D%0AAlors%20la%20on%20va%20aborder%20un%20chapitre%20tr%C3%A8s%20important.%20Les%20bases%20de%20donn%C3%A9es%20sont%20bien%20sur%20tr%C3%A8s%20importantes%20pour%20un%20site%20web%20ou%20un%20service%20web.%20On%20va%20voir%20ensemble%20comment%20ajouter%2C%20modifier%2C%20supprimer%20des%20enregistrements%20%28ou%20tuples%29%20dans%20un%20table%2C%20da" title="Ping.fm"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/ping.png" title="Ping.fm" alt="Ping.fm" class="sociable-hovers" /></a>


<br/><br/><br /><hr />
<p><small>Auteur : © Greg pour <a href="http://blog.lyrixx.info">LyRiX Blog</a>.
<br /><a href="http://blog.lyrixx.info/zend/comment-gerer-une-base-de-donnee-avec-le-zend-framework/">Article</a> publié le :  19-10-2009, dans : <a href="http://blog.lyrixx.info/category/zend/" title="Voir tous les articles dans Zend Framework" rel="category tag">Zend Framework</a>.
<a href="http://blog.lyrixx.info/zend/comment-gerer-une-base-de-donnee-avec-le-zend-framework/">Liens direct vers l'article (permalink) </a>
<br/>Mot Clé : <a href="http://blog.lyrixx.info/tag/crud/" rel="tag">CRUD</a>, <a href="http://blog.lyrixx.info/tag/mysql/" rel="tag">Mysql</a>, <a href="http://blog.lyrixx.info/tag/zend-framework/" rel="tag">Zend Framework</a>, <a href="http://blog.lyrixx.info/tag/zend_db/" rel="tag">Zend_Db</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.lyrixx.info/zend/comment-gerer-une-base-de-donnee-avec-le-zend-framework/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Comment mettre en place un systeme de traduction dans Zend Framework</title>
		<link>http://blog.lyrixx.info/zend/mettre-en-place-un-systeme-de-traduction-dans-zend-framework/</link>
		<comments>http://blog.lyrixx.info/zend/mettre-en-place-un-systeme-de-traduction-dans-zend-framework/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 10:12:34 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Bootstrap]]></category>
		<category><![CDATA[Traduction]]></category>
		<category><![CDATA[Zend_Translate]]></category>

		<guid isPermaLink="false">http://blog.lyrixx.info/?p=750</guid>
		<description><![CDATA[Avoir un site, c&#8217;est bien, mais c&#8217;est encore mieux si on peut le traduire facilement dans plusieurs langues. On va voir ensemble comment mettre en place un fichier de traduction avec Zend_Translate dans notre application. Il y a plusieurs moyens de gérer les traductions avec Zend Framework. Chacun a ses avantages et inconvénients. La je [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.lyrixx.info/wp-content/uploads/2009/10/zend_translation.jpg" alt="zend_translation" title="zend_translation" width="675" height="150" class="aligncenter size-full wp-image-802" /></p>
<p>Avoir un site, c&#8217;est bien, mais c&#8217;est encore mieux si on peut le <strong>traduire facilement dans plusieurs langues</strong>. On va voir ensemble comment mettre en place un <strong>fichier de traduction </strong>avec <em><strong>Zend_Translate</strong></em> dans notre <em>application</em>. Il y a plusieurs moyens de gérer les <strong>traductions</strong> avec <strong>Zend Framework</strong>. Chacun a ses avantages et inconvénients. La je vais utiliser un simple fichier <em>php</em> qui va contenir un <em>tableau (array) </em>avec les traductions. L&#8217;avantage du tableau php : on peut <strong>facilement le mettre a jour</strong>, il est <strong>lisible par un humain</strong>. Par contre il a un inconvénient : Si l&#8217;application est énorme, on <strong>aura des problème de performance</strong>. A vous de bien choisir la gestion de la traduction.<br />
<span id="more-750"></span></p>
<h2>Le fichier de traduction :</h2>
<p>Il faut le placer dans le dossier : <em>application/languages/</em>. Pour le nom on va être créatif et l&#8217;appeler <em>fr.php</em> pour la traduction en français. Il ressemble a ça :</p>
<pre class="brush: php;">&lt;?php
return array(
	'key_1'=&gt;'Traduction 1',
	'key_2'=&gt;'Traduction 2',
);</pre>
<p>Donc quand on va utiliser la <em>pseudo-variable</em> &#8216;<em>key_1</em>&#8216;, l&#8217;application <strong>traduira automatiquement </strong>&#8216;<em>key_1</em>&#8216; en &#8216;<em>Traduction 1</em>&#8216; (bien sur si on est en <em>français</em> dans l&#8217;application. Sinon j&#8217;ai dit <em>pseudo-variable</em> car on utilise &#8216;<em>key_1</em>&#8216; d&#8217;une façon bien particulières. Tout dépend du contexte. On va y venir&#8230;</p>
<h2>Le bootstrap</h2>
<p>Il faut bien entendu « dire » à notre application qu&#8217;il faut qu&#8217;elle utilise les traductions et il faut aussi lui donner une <strong>langue par défaut</strong>. On peut même faire en sorte que l&#8217;application choisisse elle même la langue en fonction de la position géographique de l&#8217;utilisateur final, mais la j&#8217;y reviendrais dans un prochain tuto.<br />
Voilà, on ajoute ce code dans notre <em>bootstrap</em> :</p>
<pre class="brush: php;">	/**
	* Initialize Translation
	*
	* @return Zend_Translate
	*/
	public function _initTranslate()
	{
		$translate = new Zend_Translate('array', APPLICATION_PATH . '/languages/fr.php', 'fr');
		Zend_Registry::set('Zend_Translate', $translate);
		return $translate;
	}</pre>
<p>voilà on peut maintenant utiliser notre fichier de traduction :</p>
<h2>Dans un model :</h2>
<p>Ici c&#8217;est (relativement extrêmement) simple. Par exemple si on veut mettre un <em>label</em> a un <em>élément</em> d&#8217;un <em>formulaire</em><span style="font-style: normal;"> (</span><em>Zend_Element</em>, <em>Zend_Form</em>), et bien sur le traduire il n&#8217;y a rien a faire, il suffit de donner a la méthode <em>setLabel</em> la <em>clé</em> de notre tableau qui est dans le fichier <em>fr.php</em>. Par exemple pour un champs <em>password</em> :</p>
<p re lang="php">$password = new Zend_Form_Element_Password(&#8216;password&#8217;);<br />
$password->setLabel(&#8216;form_user_add_password&#8217;);[/code]</p>
<p>Et dans notre fichier fr.php :</p>
<pre class="brush: php;">'form_user_add_password'=&gt;'Mot de passe : ',</pre>
<p><strong>Petit tips </strong>: Si on a besoin de traduire des messages d'erreurs liés aux validateurs (<em>Zend_Validate</em>) d'éléments du formulaire il faut ajouter dans le fichier de traduction, le message original renvoyé par le validateur. On peu trouvé <a href="http://framework.zend.com/manual/fr/zend.validate.messages.html">les messages originaux ici</a> (merci guiton)</p>
<pre class="brush: php;">//Pour la validation : valeur requise
'Value is required and can\'t be empty'=&gt;'la valeur est requise',
//Pour la validation : Le champs values est deja dans la BDD
'A record matching %value% was found'=&gt;'Il y a déja  \'%value%\' dans la BDD',</pre>
<p>Comme on peut le voir sur le deuxième exemple, on peut récupérer le paramètre %value% directement dans le message traduit. C'est la valeur qui a été saisi par l'utilisateur.</p>
<h2>Dans une vue (view) :</h2>
<p>Si on a besoin d'une traduction dans une vue, la c'est un tout petit peu plus compliqué :</p>
<pre class="brush: php;">&lt;?php echo $this-&gt;translate('view_user_add')?&gt;</pre>
<p>Et dans notre fichier fr.php :</p>
<pre class="brush: php;">'view_user_add'=&gt;'Ajouter un utilisateur',</pre>
<p>Voilà, c'est assez simple, si on veut la traduction de '<em>key_1</em>' il suffit de faire</p>
<pre class="brush: php;">$this-&gt;translate('key_1')</pre>
<p>Bon voilà on a fait le tours ! Enfin il me semble. Il y a des questions ou des remarques ?</p>
<p><strong >Articles en rapport : :</strong>
<ul class="similar-posts">
<li><a href="http://blog.lyrixx.info/zend/gerer-la-navigation-de-son-site-avec-le-zend-framework/" rel="bookmark" title="8 octobre 2009">Comment gérer la navigation de son site avec le Zend Framework</a></li>
<li><a href="http://blog.lyrixx.info/zend-framework/" rel="bookmark" title="19 juin 2009">Zend Framework</a></li>
<li><a href="http://blog.lyrixx.info/zend/initialisation-dun-projet-zend/" rel="bookmark" title="13 juillet 2009">Initialisation d&#8217;un projet Zend Framework Avec Zend_Tool</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-comment-utiliser-un-layout/" rel="bookmark" title="19 juin 2009">Zend : Comment utiliser un layout ?</a></li>
<li><a href="http://blog.lyrixx.info/zend/architecture-du-zend-framework-1-10/" rel="bookmark" title="18 mars 2010">Architecture du Zend Framework 1.10 en MVC</a></li>
</ul>
<p><!-- Similar Posts took 6.561 ms --></p>



Et on peut meme partager l'article:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fmettre-en-place-un-systeme-de-traduction-dans-zend-framework%2F&amp;partner=sociable" title="Print"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Comment%20mettre%20en%20place%20un%20systeme%20de%20traduction%20dans%20Zend%20Framework%20-%20http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fmettre-en-place-un-systeme-de-traduction-dans-zend-framework%2F" title="Twitter"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fmettre-en-place-un-systeme-de-traduction-dans-zend-framework%2F&amp;t=Comment%20mettre%20en%20place%20un%20systeme%20de%20traduction%20dans%20Zend%20Framework" title="Facebook"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fmettre-en-place-un-systeme-de-traduction-dans-zend-framework%2F&amp;title=Comment%20mettre%20en%20place%20un%20systeme%20de%20traduction%20dans%20Zend%20Framework&amp;bodytext=%0D%0A%0D%0AAvoir%20un%20site%2C%20c%27est%20bien%2C%20mais%20c%27est%20encore%20mieux%20si%20on%20peut%20le%20traduire%20facilement%20dans%20plusieurs%20langues.%20On%20va%20voir%20ensemble%20comment%20mettre%20en%20place%20un%20fichier%20de%20traduction%20avec%20Zend_Translate%20dans%20notre%20application.%20Il%20y%20a%20plusieurs%20moyens%20" title="Digg"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fmettre-en-place-un-systeme-de-traduction-dans-zend-framework%2F&amp;title=Comment%20mettre%20en%20place%20un%20systeme%20de%20traduction%20dans%20Zend%20Framework&amp;notes=%0D%0A%0D%0AAvoir%20un%20site%2C%20c%27est%20bien%2C%20mais%20c%27est%20encore%20mieux%20si%20on%20peut%20le%20traduire%20facilement%20dans%20plusieurs%20langues.%20On%20va%20voir%20ensemble%20comment%20mettre%20en%20place%20un%20fichier%20de%20traduction%20avec%20Zend_Translate%20dans%20notre%20application.%20Il%20y%20a%20plusieurs%20moyens%20" title="del.icio.us"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fmettre-en-place-un-systeme-de-traduction-dans-zend-framework%2F&amp;title=Comment%20mettre%20en%20place%20un%20systeme%20de%20traduction%20dans%20Zend%20Framework&amp;annotation=%0D%0A%0D%0AAvoir%20un%20site%2C%20c%27est%20bien%2C%20mais%20c%27est%20encore%20mieux%20si%20on%20peut%20le%20traduire%20facilement%20dans%20plusieurs%20langues.%20On%20va%20voir%20ensemble%20comment%20mettre%20en%20place%20un%20fichier%20de%20traduction%20avec%20Zend_Translate%20dans%20notre%20application.%20Il%20y%20a%20plusieurs%20moyens%20" title="Google Bookmarks"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.netvibes.com/share?title=Comment%20mettre%20en%20place%20un%20systeme%20de%20traduction%20dans%20Zend%20Framework&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fmettre-en-place-un-systeme-de-traduction-dans-zend-framework%2F" title="Netvibes"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/netvibes.png" title="Netvibes" alt="Netvibes" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.blogospherenews.com/submit.php?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fmettre-en-place-un-systeme-de-traduction-dans-zend-framework%2F&amp;title=Comment%20mettre%20en%20place%20un%20systeme%20de%20traduction%20dans%20Zend%20Framework" title="Blogosphere News"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/blogospherenews.png" title="Blogosphere News" alt="Blogosphere News" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fmettre-en-place-un-systeme-de-traduction-dans-zend-framework%2F" title="Identi.ca"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fmettre-en-place-un-systeme-de-traduction-dans-zend-framework%2F&amp;title=Comment%20mettre%20en%20place%20un%20systeme%20de%20traduction%20dans%20Zend%20Framework&amp;source=LyRiX+Blog+Tuto%2C+Zend%2C+Php%2C+Ajax%2C+web+2.0%2C+Flex%2C+Serveur%2C+Ubuntu%2C+Geek+%3A+Tout+ca+sur+un+blog&amp;summary=%0D%0A%0D%0AAvoir%20un%20site%2C%20c%27est%20bien%2C%20mais%20c%27est%20encore%20mieux%20si%20on%20peut%20le%20traduire%20facilement%20dans%20plusieurs%20langues.%20On%20va%20voir%20ensemble%20comment%20mettre%20en%20place%20un%20fichier%20de%20traduction%20avec%20Zend_Translate%20dans%20notre%20application.%20Il%20y%20a%20plusieurs%20moyens%20" title="LinkedIn"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fmettre-en-place-un-systeme-de-traduction-dans-zend-framework%2F" title="Technorati"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.wikio.fr/vote?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fmettre-en-place-un-systeme-de-traduction-dans-zend-framework%2F" title="Wikio FR"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/wikio.png" title="Wikio FR" alt="Wikio FR" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fmettre-en-place-un-systeme-de-traduction-dans-zend-framework%2F&amp;submitHeadline=Comment%20mettre%20en%20place%20un%20systeme%20de%20traduction%20dans%20Zend%20Framework&amp;submitSummary=%0D%0A%0D%0AAvoir%20un%20site%2C%20c%27est%20bien%2C%20mais%20c%27est%20encore%20mieux%20si%20on%20peut%20le%20traduire%20facilement%20dans%20plusieurs%20langues.%20On%20va%20voir%20ensemble%20comment%20mettre%20en%20place%20un%20fichier%20de%20traduction%20avec%20Zend_Translate%20dans%20notre%20application.%20Il%20y%20a%20plusieurs%20moyens%20&amp;submitCategory=science&amp;submitAssetType=text" title="Yahoo! Buzz"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/yahoobuzz.png" title="Yahoo! Buzz" alt="Yahoo! Buzz" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://ping.fm/ref/?link=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fmettre-en-place-un-systeme-de-traduction-dans-zend-framework%2F&amp;title=Comment%20mettre%20en%20place%20un%20systeme%20de%20traduction%20dans%20Zend%20Framework&amp;body=%0D%0A%0D%0AAvoir%20un%20site%2C%20c%27est%20bien%2C%20mais%20c%27est%20encore%20mieux%20si%20on%20peut%20le%20traduire%20facilement%20dans%20plusieurs%20langues.%20On%20va%20voir%20ensemble%20comment%20mettre%20en%20place%20un%20fichier%20de%20traduction%20avec%20Zend_Translate%20dans%20notre%20application.%20Il%20y%20a%20plusieurs%20moyens%20" title="Ping.fm"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/ping.png" title="Ping.fm" alt="Ping.fm" class="sociable-hovers" /></a>


<br/><br/><br /><hr />
<p><small>Auteur : © Greg pour <a href="http://blog.lyrixx.info">LyRiX Blog</a>.
<br /><a href="http://blog.lyrixx.info/zend/mettre-en-place-un-systeme-de-traduction-dans-zend-framework/">Article</a> publié le :  15-10-2009, dans : <a href="http://blog.lyrixx.info/category/zend/" title="Voir tous les articles dans Zend Framework" rel="category tag">Zend Framework</a>.
<a href="http://blog.lyrixx.info/zend/mettre-en-place-un-systeme-de-traduction-dans-zend-framework/">Liens direct vers l'article (permalink) </a>
<br/>Mot Clé : <a href="http://blog.lyrixx.info/tag/bootstrap/" rel="tag">Bootstrap</a>, <a href="http://blog.lyrixx.info/tag/traduction/" rel="tag">Traduction</a>, <a href="http://blog.lyrixx.info/tag/zend-framework/" rel="tag">Zend Framework</a>, <a href="http://blog.lyrixx.info/tag/zend_translate/" rel="tag">Zend_Translate</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.lyrixx.info/zend/mettre-en-place-un-systeme-de-traduction-dans-zend-framework/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Comment gérer la navigation de son site avec le Zend Framework</title>
		<link>http://blog.lyrixx.info/zend/gerer-la-navigation-de-son-site-avec-le-zend-framework/</link>
		<comments>http://blog.lyrixx.info/zend/gerer-la-navigation-de-son-site-avec-le-zend-framework/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 14:07:16 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Bootstrap]]></category>
		<category><![CDATA[Zend_Navigation]]></category>
		<category><![CDATA[Zend_Translate]]></category>

		<guid isPermaLink="false">http://blog.lyrixx.info/?p=729</guid>
		<description><![CDATA[Dans ce tuto on va voir comment mettre en place un système automatique de navigation dans le Zend Framework. C&#8217;est a dire que notre menu de navigation soit dynamique et flexible. On pourra par exemple avoir notre chemin de navigation ou fil de navigation. On va donc utiliser le composant Zend_Navigation. On a plusieurs possibilité [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-731 aligncenter" title="glossy-navigation-menu-preview" src="http://blog.lyrixx.info/wp-content/uploads/2009/10/glossy-navigation-menu-preview.jpg" alt="glossy-navigation-menu-preview" width="675" height="150" /></p>
<p>Dans ce tuto on va voir comment mettre en place un système automatique de <strong>navigation</strong> dans le <strong>Zend Framework</strong>. C&#8217;est a dire que notre <strong>menu de navigation soit dynamique et flexible</strong>. On pourra par exemple avoir notre <strong>chemin de navigation ou fil de navigation</strong>. On va donc utiliser le composant <strong>Zend_Navigation</strong>. On a plusieurs possibilité pour la gestion et le stockage de l&#8217;arbre (ou graphe) de navigation. Moi j&#8217;ai choisit le <em>XML</em> pour le stockage, et la gestion par <em>module</em>, <em>controller</em> et <em>action</em>. Enfin on utilise aussi la traduction automatique <img src='http://blog.lyrixx.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
<span id="more-729"></span></p>
<h2 id='sommaire'>Sommaire</h2>
<ul>
<li><a href="#sommaire">Sommaire</a></li>
<li><a href="#intro">Introduction</a></li>
<li><a href="#bootstrap">Bootstrap</a></li>
<li><a href="#layout">Layout</a></li>
<li><a href="#hierarchie">Hiérarchie de pages</a></li>
<li><a href="#css">Classe css de la page en cours</a></li>
<li><a href="#fil">Fil de Navigation ou breadcrumbs</a></li>
</ul>
<h2 id='intro'>Introduction</h2>
<p>On commence par un aperçu de notre fichier de navigation :</p>
<pre class="brush: xml;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;configdata&gt;
&lt;nav&gt;
	&lt;home&gt;
		&lt;label&gt;nav_home&lt;/label&gt;
		&lt;controller&gt;index&lt;/controller&gt;
	&lt;/home&gt;
&lt;/nav&gt;
&lt;/configdata&gt;</pre>
<p>Petite explication : la balise <em>configdata</em> ne sert que de nœud racine, la balise <em>nav</em> sert a repérer notre section de la gestion de la <span style="font-style: normal;">navigation</span>. Dans mon cas je n&#8217;utilise le fichier <em>navigation.xml</em> que pour gérer la navigation, pour on pourrait envisager de n&#8217;avoir qu&#8217;un seul gros fichier xml pour gérer toutes nos données et variables de l&#8217;application.<br />
Ensuite on a une balise <em>home</em>, elle représente un lien du <strong>menu</strong>, on lui donne le nom qu&#8217;on veut, elle va représenter dans notre cas la page <em>d&#8217;accueil</em>. Elle a pour classe fille une balise <em>label</em> qui définit le nom du lien. J&#8217;utilise <em>nav_home</em> car dans mon fichier de traduction j&#8217;ai une clé <em>nav_home</em> qui fait référence a <em>home</em>. Enfin il y a une balise <em>controller</em> qui définit sur quel <em>controller</em> pointe le futur lien. Il est bien sur possible de sélectionner une <em>action</em> avec la balise <em>action</em> et un <em>module</em> avec la balise <em>module</em>. C&#8217;est bien fait non ? Sinon il est possible aussi d&#8217;avoir un liens direct grâce a la balise <em>uri</em>. Un petit exemple qui regroupe tout les cas : </p>
<pre class="brush: xml;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;configdata&gt;
&lt;nav&gt;
	&lt;home&gt;
		&lt;label&gt;nav_home&lt;/label&gt;
		&lt;controller&gt;index&lt;/controller&gt;
	&lt;/home&gt;
	&lt;page2&gt;
		&lt;label&gt;Page 2&lt;/label&gt;
		&lt;module&gt;mon_module&lt;/module&gt;
		&lt;controller&gt;mon_controller&lt;/controller&gt;
		&lt;action&gt;mon_action&lt;/action&gt;
	&lt;/home&gt;
	&lt;home&gt;
		&lt;label&gt;nav_home&lt;/label&gt;
		&lt;uri&gt;/foo/bar/&lt;/uri&gt;
	&lt;/home&gt;
&lt;/nav&gt;
&lt;/configdata&gt;</pre>
<h2 id='bootstrap'>Bootstrap</h2>
<p>Il faut rajouter une méthode a notre <em><strong>bootstrap</strong></em> :</p>
<pre class="brush: php;">	/**
	 * @return Zend_Navigation
	 */
	protected function _initNavigation()	{
		$view = $this-&gt;bootstrap('layout')-&gt;getResource('layout')-&gt;getView();
		$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
		$view-&gt;navigation(new Zend_Navigation($config));
	}
</pre>
<p>La seule chose a retenir ici est le premier argument de la méthode <strong><em>Zend_Config_Xml</em></strong> : c&#8217;est le chemin de notre <strong>fichier de navigation</strong> et le deuxième argument représente la balise mère de notre <em>section de navigation</em> dans le fichier <em>xml</em>.<br />
Voilà, on a notre fonction de navigation disponible dans notre application. Il suffit maintenant de l&#8217;utiliser.</p>
<h2 id='layout'>Layout</h2>
<p>Histoire de faire le plus simple possible, on va ajouter notre barre de navigation directement dans le <em>layout</em>, histoire de le retrouver sur toutes les pages. Il suffit de rajouter ce bout de code dans le fichier <em>layout.phtml</em> à l&#8217;endroit ou vous voulez que le menu s&#8217;affiche :</p>
<pre class="brush: php;">&lt;?php echo $this-&gt;navigation()-&gt;menu(); ?&gt;</pre>
<h2 id='hierarchie'>Hiérarchie de pages</h2>
<p>On va voir maintenant un exemple de fichier xml ou il y a plusieurs pages et sous pages<br />
<img class="alignright size-full wp-image-735" title="navigation-Menu" src="http://blog.lyrixx.info/wp-content/uploads/2009/10/navigation-Menu.png" alt="navigation-Menu" width="208" height="156" /></p>
<pre class="brush: xml;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;configdata&gt;
&lt;nav&gt;
	&lt;home&gt;
		&lt;label&gt;nav_home&lt;/label&gt;
		&lt;controller&gt;index&lt;/controller&gt;
		&lt;pages&gt;
			&lt;add&gt;
				&lt;label&gt;nav_fact_add&lt;/label&gt;
				&lt;controller&gt;fact&lt;/controller&gt;
				&lt;action&gt;add&lt;/action&gt;
			&lt;/add&gt;
			&lt;list&gt;
				&lt;label&gt;nav_fact_list&lt;/label&gt;
				&lt;controller&gt;fact&lt;/controller&gt;
			&lt;/list&gt;
			&lt;calc&gt;
				&lt;label&gt;nav_calc&lt;/label&gt;
				&lt;controller&gt;calc&lt;/controller&gt;
			&lt;/calc&gt;
			&lt;user&gt;
				&lt;label&gt;nav_user&lt;/label&gt;
				&lt;controller&gt;user&lt;/controller&gt;
			&lt;/user&gt;
			&lt;stats&gt;
				&lt;label&gt;nav_sats&lt;/label&gt;
				&lt;controller&gt;stats&lt;/controller&gt;
			&lt;/stats&gt;
		&lt;/pages&gt;
	&lt;/home&gt;
&lt;/nav&gt;
&lt;/configdata&gt;</pre>
<p>Voilà, <strong>la balise a retenir </strong>est la balise <em>pages</em> qui permet de définir des sous pages ou sous menu. Et bien sur on peut en imbriquer autant qu&#8217;on veut.<br />
Enfin il faut savoir que le code <em>html</em> des liens sur la page suit une hiérarchie de balise <em>ul/li</em>.</p>
<h2 id='css'>Classe css de la page en cours</h2>
<p>Comment ajouter une classe au <em>lien</em> qui pointe vers <strong>la page en cours</strong> ? Et bien il suffit de rajouter ce bout de code en haut de chaque <em>controller</em> (dans la méthode <em>init</em>) :</p>
<pre class="brush: php;">	public function init()
	{
		/* Initialize action controller here */
		$activeNav = $this-&gt;view-&gt;navigation()-&gt;findByController('index');
		$activeNav-&gt;active = true;
		$activeNav-&gt;setClass(&quot;active&quot;);
	}</pre>
<p>Et voilà maintenant quand on est sur une page du <em>controller</em> <em>index</em> (dans ce cas la) et bien le lien aura (entre autre) la classe <em>active</em>. Il suffit après de toucher au <em>css</em> pour ajouter un petit effet <img src='http://blog.lyrixx.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Vous en voulez encore plus ?</p>
<h2 id='fil'>Fil de Navigation ou <strong>breadcrumbs</strong></h2>
<p><img class="alignright size-full wp-image-736" title="navigation-fil" src="http://blog.lyrixx.info/wp-content/uploads/2009/10/navigation-fil.png" alt="navigation-fil" width="296" height="41" /></p>
<p>Et bien avec <em>Zend_Navigation </em>on peut retracer notre <strong>chemin de navigation</strong>, qui soit dit en passant est très bon en terme d&#8217;ergonomie, mais aussi en terme de référencement. Donc je vous invite vraiment à le mettre en place. Encore une fois, il suffit de rajouter une ligne de <em>php</em> dans le fichier <em>layout.phtml</em> :</p>
<pre class="brush: php;">&lt;?php echo $this-&gt;navigation()-&gt;breadcrumbs()-&gt;setMinDepth(0)-&gt;setLinkLast(true)-&gt;setSeparator(&quot; &gt;&gt; &quot;); ?&gt;</pre>
<p>Alors on décortique le bousin :</p>
<ul>
<li>
<em>$this-&gt;navigation()-&gt;breadcrumbs()</em> va afficher le <strong>fil de navigation</strong>.
</li>
<li>
<em>-&gt;setMinDepth(0)</em> va 	définir si il faut ou pas afficher ce fil ; il est en accord direct 	avec la profondeur du <em>xml</em>.
</li>
<li>
<em>-&gt;setLinkLast(true)</em> définit si il faut ou pas mettre un liens sur le dernier fils du 	fil de navigation qui correspond à la page en cours
</li>
<li>
<em>-&gt;setSeparator(&nbsp;&raquo; &gt;&gt; 	&laquo;&nbsp;)</em> définit par quelle chaine de caractère est séparer 	notre liste de liens.
</li>
</ul>
<p>Voilà, comme on a pu voir, le plus dur est de faire le fichier <em>xml</em> ainsi que le <em>css</em> des menus. Après c&#8217;est un jeux d&#8217;enfant pour avoir de beau menu <img src='http://blog.lyrixx.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
<a href="http://www.psdgraphics.com/wp-content/uploads/2009/02/glossy-navigation-menu-preview.jpg" target="_self" rel="lightbox[729]">[Header]</a></p>
<p><strong >Articles en rapport : :</strong>
<ul class="similar-posts">
<li><a href="http://blog.lyrixx.info/zend/initialisation-dun-projet-zend/" rel="bookmark" title="13 juillet 2009">Initialisation d&#8217;un projet Zend Framework Avec Zend_Tool</a></li>
<li><a href="http://blog.lyrixx.info/zend/comment-mettre-en-place-un-layout-avec-le-zend-framework-1-8/" rel="bookmark" title="23 juillet 2009">Comment mettre en place un Layout avec le Zend-Framework 1.8</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-quest-ce-quun-controller/" rel="bookmark" title="19 juin 2009">Zend : Qu&#8217;est ce qu&#8217;un controller ?</a></li>
<li><a href="http://blog.lyrixx.info/zend/comment-bien-demarrer-un-projet-zend-framework-grace-aux-zend_tool/" rel="bookmark" title="18 mars 2010">Comment bien démarrer un projet Zend Framework grâce aux Zend_Tool</a></li>
<li><a href="http://blog.lyrixx.info/zend/zend-comment-faire-une-vue/" rel="bookmark" title="26 juin 2009">Zend : Comment faire une vue</a></li>
</ul>
<p><!-- Similar Posts took 7.625 ms --></p>



Et on peut meme partager l'article:


	<a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-la-navigation-de-son-site-avec-le-zend-framework%2F&amp;partner=sociable" title="Print"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://twitter.com/home?status=Comment%20g%C3%A9rer%20la%20navigation%20de%20son%20site%20avec%20le%20Zend%20Framework%20-%20http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-la-navigation-de-son-site-avec-le-zend-framework%2F" title="Twitter"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-la-navigation-de-son-site-avec-le-zend-framework%2F&amp;t=Comment%20g%C3%A9rer%20la%20navigation%20de%20son%20site%20avec%20le%20Zend%20Framework" title="Facebook"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-la-navigation-de-son-site-avec-le-zend-framework%2F&amp;title=Comment%20g%C3%A9rer%20la%20navigation%20de%20son%20site%20avec%20le%20Zend%20Framework&amp;bodytext=%0D%0A%0D%0A%0D%0ADans%20ce%20tuto%20on%20va%20voir%20comment%20mettre%20en%20place%20un%20syst%C3%A8me%20automatique%20de%20navigation%20dans%20le%20Zend%20Framework.%20C%27est%20a%20dire%20que%20notre%20menu%20de%20navigation%20soit%20dynamique%20et%20flexible.%20On%20pourra%20par%20exemple%20avoir%20notre%20chemin%20de%20navigation%20ou%20fil%20de" title="Digg"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-la-navigation-de-son-site-avec-le-zend-framework%2F&amp;title=Comment%20g%C3%A9rer%20la%20navigation%20de%20son%20site%20avec%20le%20Zend%20Framework&amp;notes=%0D%0A%0D%0A%0D%0ADans%20ce%20tuto%20on%20va%20voir%20comment%20mettre%20en%20place%20un%20syst%C3%A8me%20automatique%20de%20navigation%20dans%20le%20Zend%20Framework.%20C%27est%20a%20dire%20que%20notre%20menu%20de%20navigation%20soit%20dynamique%20et%20flexible.%20On%20pourra%20par%20exemple%20avoir%20notre%20chemin%20de%20navigation%20ou%20fil%20de" title="del.icio.us"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-la-navigation-de-son-site-avec-le-zend-framework%2F&amp;title=Comment%20g%C3%A9rer%20la%20navigation%20de%20son%20site%20avec%20le%20Zend%20Framework&amp;annotation=%0D%0A%0D%0A%0D%0ADans%20ce%20tuto%20on%20va%20voir%20comment%20mettre%20en%20place%20un%20syst%C3%A8me%20automatique%20de%20navigation%20dans%20le%20Zend%20Framework.%20C%27est%20a%20dire%20que%20notre%20menu%20de%20navigation%20soit%20dynamique%20et%20flexible.%20On%20pourra%20par%20exemple%20avoir%20notre%20chemin%20de%20navigation%20ou%20fil%20de" title="Google Bookmarks"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.netvibes.com/share?title=Comment%20g%C3%A9rer%20la%20navigation%20de%20son%20site%20avec%20le%20Zend%20Framework&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-la-navigation-de-son-site-avec-le-zend-framework%2F" title="Netvibes"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/netvibes.png" title="Netvibes" alt="Netvibes" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.blogospherenews.com/submit.php?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-la-navigation-de-son-site-avec-le-zend-framework%2F&amp;title=Comment%20g%C3%A9rer%20la%20navigation%20de%20son%20site%20avec%20le%20Zend%20Framework" title="Blogosphere News"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/blogospherenews.png" title="Blogosphere News" alt="Blogosphere News" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://identi.ca/notice/new?status_textarea=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-la-navigation-de-son-site-avec-le-zend-framework%2F" title="Identi.ca"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/identica.png" title="Identi.ca" alt="Identi.ca" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-la-navigation-de-son-site-avec-le-zend-framework%2F&amp;title=Comment%20g%C3%A9rer%20la%20navigation%20de%20son%20site%20avec%20le%20Zend%20Framework&amp;source=LyRiX+Blog+Tuto%2C+Zend%2C+Php%2C+Ajax%2C+web+2.0%2C+Flex%2C+Serveur%2C+Ubuntu%2C+Geek+%3A+Tout+ca+sur+un+blog&amp;summary=%0D%0A%0D%0A%0D%0ADans%20ce%20tuto%20on%20va%20voir%20comment%20mettre%20en%20place%20un%20syst%C3%A8me%20automatique%20de%20navigation%20dans%20le%20Zend%20Framework.%20C%27est%20a%20dire%20que%20notre%20menu%20de%20navigation%20soit%20dynamique%20et%20flexible.%20On%20pourra%20par%20exemple%20avoir%20notre%20chemin%20de%20navigation%20ou%20fil%20de" title="LinkedIn"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-la-navigation-de-son-site-avec-le-zend-framework%2F" title="Technorati"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.wikio.fr/vote?url=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-la-navigation-de-son-site-avec-le-zend-framework%2F" title="Wikio FR"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/wikio.png" title="Wikio FR" alt="Wikio FR" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://buzz.yahoo.com/submit/?submitUrl=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-la-navigation-de-son-site-avec-le-zend-framework%2F&amp;submitHeadline=Comment%20g%C3%A9rer%20la%20navigation%20de%20son%20site%20avec%20le%20Zend%20Framework&amp;submitSummary=%0D%0A%0D%0A%0D%0ADans%20ce%20tuto%20on%20va%20voir%20comment%20mettre%20en%20place%20un%20syst%C3%A8me%20automatique%20de%20navigation%20dans%20le%20Zend%20Framework.%20C%27est%20a%20dire%20que%20notre%20menu%20de%20navigation%20soit%20dynamique%20et%20flexible.%20On%20pourra%20par%20exemple%20avoir%20notre%20chemin%20de%20navigation%20ou%20fil%20de&amp;submitCategory=science&amp;submitAssetType=text" title="Yahoo! Buzz"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/yahoobuzz.png" title="Yahoo! Buzz" alt="Yahoo! Buzz" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://ping.fm/ref/?link=http%3A%2F%2Fblog.lyrixx.info%2Fzend%2Fgerer-la-navigation-de-son-site-avec-le-zend-framework%2F&amp;title=Comment%20g%C3%A9rer%20la%20navigation%20de%20son%20site%20avec%20le%20Zend%20Framework&amp;body=%0D%0A%0D%0A%0D%0ADans%20ce%20tuto%20on%20va%20voir%20comment%20mettre%20en%20place%20un%20syst%C3%A8me%20automatique%20de%20navigation%20dans%20le%20Zend%20Framework.%20C%27est%20a%20dire%20que%20notre%20menu%20de%20navigation%20soit%20dynamique%20et%20flexible.%20On%20pourra%20par%20exemple%20avoir%20notre%20chemin%20de%20navigation%20ou%20fil%20de" title="Ping.fm"><img src="http://blog.lyrixx.info/wp-content/plugins/sociable/images/ping.png" title="Ping.fm" alt="Ping.fm" class="sociable-hovers" /></a>


<br/><br/><br /><hr />
<p><small>Auteur : © Greg pour <a href="http://blog.lyrixx.info">LyRiX Blog</a>.
<br /><a href="http://blog.lyrixx.info/zend/gerer-la-navigation-de-son-site-avec-le-zend-framework/">Article</a> publié le :  08-10-2009, dans : <a href="http://blog.lyrixx.info/category/zend/" title="Voir tous les articles dans Zend Framework" rel="category tag">Zend Framework</a>.
<a href="http://blog.lyrixx.info/zend/gerer-la-navigation-de-son-site-avec-le-zend-framework/">Liens direct vers l'article (permalink) </a>
<br/>Mot Clé : <a href="http://blog.lyrixx.info/tag/bootstrap/" rel="tag">Bootstrap</a>, <a href="http://blog.lyrixx.info/tag/zend-framework/" rel="tag">Zend Framework</a>, <a href="http://blog.lyrixx.info/tag/zend_navigation/" rel="tag">Zend_Navigation</a>, <a href="http://blog.lyrixx.info/tag/zend_translate/" rel="tag">Zend_Translate</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://blog.lyrixx.info/zend/gerer-la-navigation-de-son-site-avec-le-zend-framework/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
	</channel>
</rss>
