
<?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>Waanser &#187; Zend Framework</title>
	<atom:link href="http://www.waanser.com/category/php/zend-framework/feed" rel="self" type="application/rss+xml" />
	<link>http://www.waanser.com</link>
	<description>Un blog utilisant WordPress</description>
	<lastBuildDate>Wed, 07 Jul 2010 21:54:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Layout et connexion à une base avec Zend</title>
		<link>http://www.waanser.com/php/zend-framework/2201-layout-et-connexion-a-une-base-avec-zen-zend_db.html</link>
		<comments>http://www.waanser.com/php/zend-framework/2201-layout-et-connexion-a-une-base-avec-zen-zend_db.html#comments</comments>
		<pubDate>Tue, 09 Jun 2009 21:39:16 +0000</pubDate>
		<dc:creator>roul</dc:creator>
				<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=2201</guid>
		<description><![CDATA[Notion fondamentale de zend framework, nous allons voir dans cet article comment organiser le contenu de nos pages avec l&#8217;utilisation des layouts. Nous allons aussi faire une première approche de Zend_Db, la classe de zend qui manipule la base de données. Les layouts Dans cet article, nous allons reprendre le code source du tutoriel précédent. [...]]]></description>
			<content:encoded><![CDATA[<p>Notion fondamentale de zend framework, nous allons voir dans cet article comment organiser le contenu de nos pages avec l&#8217;utilisation des layouts. Nous allons aussi faire une première approche de <strong>Zend_Db</strong>, la classe de zend qui manipule la base de données.<span id="more-2201"></span></p>
<h2>Les layouts</h2>
<p>Dans cet article, nous allons reprendre <a href='http://media.waanser.com/2009/04/zenfacile.rar'> le code source</a> du tutoriel précédent.</p>
<p>Pour éviter d&#8217;avoir à recopier les mêmes morceaux de code pour chaque page, il est important de bien savoir structurer nos pages (définir une entête,un corps, un pied de page &#8230;). Avec Zend cette organisation se fait à travers les layouts.</p>
<pre class="brush: php">
// setup controller
$frontController = Zend_Controller_Front::getInstance();
$frontController-&gt;throwExceptions(true);
$frontController-&gt;setControllerDirectory(&#039;./application/controllers&#039;);
// on définit le chemin des layouts
$aOptions = array(
    &#039;layout&#039;     =&gt; &#039;home&#039;,
    &#039;layoutPath&#039; =&gt; &#039;./application/layouts&#039;
);
Zend_Layout::startMvc($aOptions);
</pre>
<hr/>
<strong>Zend_Layout::startMvc($aOptions);</strong><br />
Démarre le layout en prenant les options en paramètre.<br />
Dans les options :<br />
<strong>layoutPath </strong>=> le chemin où seront stockés les layouts<br />
<strong>layout    </strong>=> le nom du layout</p>
<hr/>
<p>Vous l&#8217;aurez compris, nous allons créer un dossier <strong>layouts</strong> dans notre dossier application où seront stockés nos layouts. Voici notre nouvelle arborescence :</p>
<div id="attachment_2203" class="wp-caption alignnone" style="width: 174px"><a href="http://media.waanser.com/2009/06/zend.jpg"><img src="http://media.waanser.com/2009/06/zend.jpg" alt="layouts zend" title="zend" width="164" height="127" class="size-full wp-image-2203" /></a><p class="wp-caption-text">layouts zend</p></div>
<hr/>
zenfacile => application => layouts => home.phtml</p>
<hr/>
<pre class="brush: html">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
        &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;fr&quot; lang=&quot;fr&quot;&gt;
&lt;head&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=utf-8&quot; /&gt;
	&lt;title&gt;&lt;?php echo $this-&gt;title; ?&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;content&quot;&gt;
    &lt;h1&gt;&lt;?php echo $this-&gt;welcome; ?&gt;&lt;/h1&gt;
    &lt;?php echo $this-&gt;layout()-&gt;content; ?&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong> $this->layout()->content;</strong> sera le contenu de nos pages.</p>
<p>Nous allons retourner dans notre contrôleur principal.</p>
<hr/>
zenfacile => application => controllers => IndexControler.php</p>
<hr/>
<pre class="brush: php">
class IndexController extends Zend_Controller_Action
{
    function indexAction()
    {
    	    $this-&gt;view-&gt;title = &quot;Mes amis&quot;;
    	    $this-&gt;view-&gt;welcome = &quot;Bienvenue&quot;;
    }
</pre>
<p>Le rendu n&#8217;est pas super, mais ça au moins le mérite de montrer que ça marche.</p>
<div id="attachment_2210" class="wp-caption alignnone" style="width: 251px"><a href="http://media.waanser.com/2009/06/zend1.jpg"><img src="http://media.waanser.com/2009/06/zend1.jpg" alt="zend layout" title="zend1" width="241" height="101" class="size-full wp-image-2210" /></a><p class="wp-caption-text">zend layout</p></div>
<h2>La base de données avec Zend_Db </h2>
<p>Pour se connecter à la base de données, il faut bien naturellement indiquer les identifiants de connexions.<br />
Avec Zend, on passe par un fichier de configuration ini.</p>
<hr/>
zenfacile => index.php</p>
<hr/>
<pre class="brush: php">
Zend_Loader::registerAutoload();
//on définit un nouvel objet de configuration
$oConfig = new Zend_Config_Ini(&#039;./application/config.ini&#039;, &#039;connexion&#039;);
// Mise en place de la BDD
$oDb = Zend_Db::factory($oConfig-&gt;db);
// on définit notre objet de base de données par défaut
Zend_Db_Table::setDefaultAdapter($oDb);
</pre>
<p>new Zend_Config_Ini(le chemin de notre fichier ini, la section concerner);</p>
<hr/>
zenfacile => application => config.ini</p>
<hr/>
<p>[connexion]<br />
db.adapter = PDO_MYSQL<br />
db.params.host = localhost<br />
db.params.username = root<br />
db.params.password =<br />
db.params.dbname = zendfacile</p>
<p>Nous allons créer la base de donnée, voici la table :</p>
<pre class="brush: sql">
CREATE TABLE ami (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
nom VARCHAR( 255 ) NOT NULL ,
prenom VARCHAR( 255 ) NOT NULL
)
</pre>
<p>Les données :</p>
<pre class="brush: sql">
INSERT INTO zendfacile.ami (id ,nom ,prenom)
VALUES (NULL , &#039;Laporte&#039;, &#039;Jean&#039;);

INSERT INTO zendfacile.ami (id ,nom ,prenom)
VALUES (NULL , &#039;LaPie&#039;, &#039;Marie&#039;);
</pre>
<p>Maintenant que notre base est faite, on va s&#8217;attaquer au code <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<hr/>
zenfacile => application => controllers => IndexControler.php</p>
<hr/>
<pre class="brush: php">
class IndexController extends Zend_Controller_Action
{
    function indexAction()
    {
    	    $this-&gt;view-&gt;title = &quot;Mes amis&quot;;
    	    $this-&gt;view-&gt;welcome = &quot;Bienvenue&quot;;
    	    $oAmi = new Ami();
    	     $this-&gt;view-&gt;ami = $oAmi-&gt;fetchAll();
    }
</pre>
<p> $oAmi = new Ami();<br />
va faire appel au modéle ami. On l&#8217;a pas créé ?<br />
j&#8217;allais l&#8217;oublier <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<hr/>
zenfacile => application => models=> Ami.php</p>
<hr/>
<pre class="brush: php">
class Ami extends Zend_Db_Table
{
    protected $_name = &#039;ami&#039;;
}
</pre>
<p>On a plus qu&#8217;à afficher notre résultat :</p>
<pre class="brush: html">
&lt;table&gt;
&lt;tr&gt;
	&lt;th&gt;Nom&lt;/th&gt;
	&lt;th&gt;Prenom&lt;/th&gt;
	&lt;th&gt;&amp;amp;amp;amp;amp;amp;nbsp;&lt;/th&gt;
&lt;/tr&gt;

&lt;?php foreach($this-&gt;ami as $ami) : ?&gt;
&lt;tr&gt;
	&lt;td&gt;&lt;?php echo $ami-&gt;nom;?&gt;&lt;/td&gt;
	&lt;td&gt;&lt;?php echo $ami-&gt;prenom;?&gt;&lt;/td&gt;

&lt;/tr&gt;
&lt;?php endforeach; ?&gt;
&lt;/table&gt;
</pre>
<p>C&#8217;est pas beau, mais on a ce que l&#8217;on a demandé <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  :<br />
<div id="attachment_2214" class="wp-caption alignnone" style="width: 215px"><a href="http://media.waanser.com/2009/06/zend2.jpg"><img src="http://media.waanser.com/2009/06/zend2.jpg" alt="Zend_Db" title="zend" width="205" height="190" class="size-full wp-image-2214" /></a><p class="wp-caption-text">Zend_Db</p></div><br />
<a href='http://media.waanser.com/2009/06/zenfacile.rar'>Voici le pack complet qui regroupe tout le code source fonctionnel</a><br />
<br/></p>
<p>Voilà une première mise en bouche des possibilités de Zend, dans les prochains articles nous irons plus loin dans l&#8217;univers de ZEND.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/php/zend-framework/2201-layout-et-connexion-a-une-base-avec-zen-zend_db.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Une approche de Zend Framework 1.7</title>
		<link>http://www.waanser.com/php/zend-framework/1425-une-approche-de-zend-framework-17.html</link>
		<comments>http://www.waanser.com/php/zend-framework/1425-une-approche-de-zend-framework-17.html#comments</comments>
		<pubDate>Thu, 09 Apr 2009 16:54:36 +0000</pubDate>
		<dc:creator>roul</dc:creator>
				<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=1425</guid>
		<description><![CDATA[Zend fait parti de ces frameworks qui font beaucoup parler d&#8217;eux. Pour les néophytes ce n&#8217;est pas toujours évident de mettre en place et d&#8217;utiliser ce framework. Sans entrer dans les détails nous allons voir comment installer la dernière version en ligne de zend, la 1.7. Ce qu&#8217;il faut Si vous le savez pas, il [...]]]></description>
			<content:encoded><![CDATA[<p>Zend fait parti de ces frameworks qui font beaucoup parler d&#8217;eux. Pour les néophytes ce n&#8217;est pas toujours évident de mettre en place et d&#8217;utiliser ce framework. Sans entrer dans les détails nous allons voir comment installer la dernière version en ligne de zend, la 1.7.</p>
<h2>Ce qu&#8217;il faut</h2>
<p>Si vous le savez pas, il faut <strong>php5</strong> et activé le <strong>module_rewrite</strong> </p>
<div id="attachment_1426" class="wp-caption alignnone" style="width: 357px"><a href="http://media.waanser.com/2009/04/zend.png"><img src="http://media.waanser.com/2009/04/zend.png" alt="zend" title="zend" width="347" height="359" class="size-full wp-image-1426" /></a><p class="wp-caption-text">zend</p></div>
<p>Et on télécharge la <a href="http://framework.zend.com/download/latest">dernière version</a>.</p>
<p>On va créer notre dossier <em>zenfacile</em> où seront enregistrées les pages. Dans ce dossier on va créer un dossier <em>Zend</em>. Dans ce dossier on va mettre la librairie Zend.</p>
<p><a href="http://media.waanser.com/2009/04/zend1.png"><img src="http://media.waanser.com/2009/04/zend1.png" alt="zend" title="zend1" class="alignnone size-full wp-image-1428" /></a></p>
<h2>Arborescence</h2>
<p>L&#8217;arborescence de notre site va suivre une structure MVC traditionnel :<br />
<a href="http://media.waanser.com/2009/04/zend2.png"><img src="http://media.waanser.com/2009/04/zend2.png" alt="zend" title="zend2" class="alignnone size-full wp-image-1429" /></a></p>
<p>Comme on va faire de la réécriture d&#8217;url, on va ajouter un fichier .htaccess</p>
<pre class="brush: php">
# Règles de réécriture pour Zend Framework
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php

# Sécurité : Ne pas autoriser le parcours de répertoires
Options -Indexes

# Configuration PHP
php_flag magic_quotes_gpc off
php_flag register_globals off
php_flag short_open_tag on
</pre>
<p>voici le fichier <a href='http://media.waanser.com/2009/04/.htaccess'>.htaccess</a></p>
<p>Maintenant tout est prêt, on va pouvoir s&#8217;attaquer au php.<br />
(eh oui ça va très vite on y va pas avec de la dentelle) <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>On va commencer par l&#8217;index.php</p>
<p>On va pas se précipiter, on va déjà voir si la librairie est bien chargé :</p>
<pre class="brush: php">
error_reporting(E_ALL|E_STRICT);
ini_set(&#039;display_errors&#039;, 1);
date_default_timezone_set(&#039;Europe/Paris&#039;);

// mise en place des répertoires et chargement des classes
set_include_path(&#039;.&#039;
    . PATH_SEPARATOR . &#039;./library&#039;
    . PATH_SEPARATOR . &#039;./application/models/&#039;
    . PATH_SEPARATOR . get_include_path());
include &quot;Zend/Loader.php&quot;;

echo &#039;salut Zend !&#039;;
</pre>
<p>Le message salut Zend !  devrait s&#8217;afficher sur cette page  :<a href="http://localhost/zenfacile/" >http://localhost/zenfacile</a></p>
<p>C&#8217;est bon ? <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Voici ce que l&#8217;on va mettre :</p>
<pre class="brush: php">
&lt;?php

error_reporting(E_ALL|E_STRICT);
ini_set(&#039;display_errors&#039;, 1);
date_default_timezone_set(&#039;Europe/Paris&#039;);

// mise en place des répertoires et chargement des classes
set_include_path(&#039;.&#039;
    . PATH_SEPARATOR . &#039;./library&#039;
    . PATH_SEPARATOR . &#039;./application/models/&#039;
    . PATH_SEPARATOR . get_include_path());
include &quot;Zend/Loader.php&quot;;

Zend_Loader::registerAutoload();

// setup controller
$frontController = Zend_Controller_Front::getInstance();
$frontController-&gt;throwExceptions(true);
$frontController-&gt;setControllerDirectory(&#039;./application/controllers&#039;);

// run!
$frontController-&gt;dispatch();
?&gt;
</pre>
<p>Normalement vous avez une belle fatal erreur :</p>
<hr/>
<b>Fatal error</b>:  Uncaught exception &#8216;Zend_Controller_Dispatcher_Exception&#8217; with message &#8216;Invalid controller specified (index)&#8217; in C:\wamp\www\zenfacile\Zend\Controller\Dispatcher\Standard.php:241<br />
Stack trace:#0 C:\wamp\www\zenfacile\Zend\Controller\Front.php(934): Zend_Controller_Dispatcher_Standard-&gt;dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 C:\wamp\www\zenfacile\index.php(23): Zend_Controller_Front-&gt;dispatch() #2 {main}<br />
  thrown in <b>C:\wamp\www\zenfacile\Zend\Controller\Dispatcher\Standard.php</b> on line <b>241</b></p>
<hr/>
<p>Pas de panique c&#8217;est normal <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Par défaut Zend recherche le contrôleur Index.</p>
<p>Et comme il n&#8217;existe pas, Zend nous génère une erreur.</p>
<h2>Strucuture MVC</h2>
<p>On va créer ce controleur :</p>
<hr/>
zenfacile => application => controllers => IndexControler.php</p>
<hr/>
<p>Le nom de la classe doit forcément ce terminer par <strong>Controller</strong></p>
<pre class="brush: php">
class IndexController extends Zend_Controller_Action
{
    function indexAction()
    {
    	 $this-&gt;view-&gt;title = &quot;Mon Zend&quot;;
    }
}
</pre>
<p>Il faut savoir que dans chaque controleur il y a des actions (qui est en fait des méthodes de la classe).<br />
Ces méthodes actions doivent se terminer par <strong>Action</strong>.<br />
Ainsi pour l&#8217;action Index la méthode l&#8217;appellera <strong>indexAction</strong>.</p>
<p>L&#8217;objet <strong>$this-&gt;view </strong> est l&#8217;objet qui manipule la vue.</p>
<p>Comme vous l&#8217;avez remarquez notre classe hérite de <strong>Zend_Controller_Action</strong>.</p>
<p>Comment fait-on pour retrouver cette classe ?</p>
<p>Facile ! On remplace les <strong>_</strong> par les <strong>/ </strong>. Et voilà, on a l&#8217;arborescence et le nom de la classe.<br />
Pour Zend_Controller_Action la classe se situeras dans :<br />
Zend => Controller =>Action.php</p>
<p><strong>La vue</strong></p>
<p>Pour la vue, il faut aller dans le dossier <strong>views </strong> créer un dossier <strong>scripts</strong>.<br />
Un fois ceci fait nous allons créer un dossier qui porte le nom du contrôleur. Le nom de notre vue sera alors <strong>index</strong>.</p>
<p>Le nom de la vue doit être le nom de l&#8217;action, son nom sera alors <strong>index.phtml</strong></p>
<hr/>
zenfacile => application => views => scripts => index => index.phtml</p>
<hr/>
<pre class="brush: html">
&lt;html&gt;
&lt;head&gt;
	&lt;title&gt;&lt;?php echo $this-&gt;escape($this-&gt;title); ?&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;h1&gt;&lt;?php echo $this-&gt;escape($this-&gt;title); ?&gt;&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>et là on rafraichit <a href="http://localhost/zenfacile/"></a><br />
<a href="http://localhost/zenfacile/index/index"></a></p>
<p> on voit le message !  c&#8217;est que ça marche \o/</p>
<p>Pour la réécriture d&#8217;url zend fait vraiment simple. c&#8217;est http://lenomdusite/<strong>controleur</strong>/<strong>action</strong>. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
On va créer une autre page, une page contact (elle aussi sera toute simple)</p>
<pre class="brush: php">
    function contactAction()
    {
    	 $this-&gt;view-&gt;title = &quot;Contact&quot;;
    }
</pre>
<p>Avec une vue identique :</p>
<hr/>
zenfacile => application => views => scripts => index => contact.phtml</p>
<hr/>
<pre class="brush: html">
&lt;html&gt;
&lt;head&gt;
	&lt;title&gt;&lt;?php echo $this-&gt;escape($this-&gt;title); ?&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;h1&gt;&lt;?php echo $this-&gt;escape($this-&gt;title); ?&gt;&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Pour y accéder ça sera : <a href="http://localhost/zenfacile/">http://localhost/zenfacile/index/contact</a></p>
<p>Et voila notre Zend est installé, pour ne pas trop alourdir le tutoriel, j&#8217;ai fait l&#8217;impasse sur des notions importantes comme le MVC, si vous avez des questions n&#8217;hésitez pas à poster un commentaire.</p>
<p>Voici le dossier complet : <a href='http://media.waanser.com/2009/04/zenfacile.rar'>zenfacile</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/php/zend-framework/1425-une-approche-de-zend-framework-17.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
