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

<channel>
	<title>Alexandre JULIEN &#187; Zend Framework</title>
	<atom:link href="http://www.alexandre-julien.com/category/php/zend-framework-php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alexandre-julien.com</link>
	<description>Industrialisation des développements, PHP, .NET, jQuery, HTML5, Web, …</description>
	<lastBuildDate>Sun, 22 Jan 2012 20:26:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Zend Framework 2.0 : première version de développement</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-2-0-premiere-version-de-developpement/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-2-0-premiere-version-de-developpement</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-2-0-premiere-version-de-developpement/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 20:19:28 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[zend framework 2]]></category>
		<category><![CDATA[zf]]></category>

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

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

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

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

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

// Surcharge de _initAutoLoad
protected function _initAutoload()

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

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

return $moduleLoader;
}

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

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

// Surcharge de _initAutoLoad
protected function _initAutoload()

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

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

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

return $moduleLoader;
}

}
</pre>
<p>Ainsi on pourra créer et appeler une url de type : &laquo;&nbsp;www.maboutique.com/produits/processeurs/dual-core/article-intelcore2duo-PI5421.html&nbsp;&raquo;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-5-routing-et-urlrewriting-avec-zend_controller/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework tutoriel #4 : Création de formulaire et validations avec Zend_Form et Zend_Validate</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-tutoriel-4-creation-de-formulaire-et-validations-avec-zend_form-et-zend_validate/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-tutoriel-4-creation-de-formulaire-et-validations-avec-zend_form-et-zend_validate</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-tutoriel-4-creation-de-formulaire-et-validations-avec-zend_form-et-zend_validate/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 19:30:30 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[formulaire]]></category>
		<category><![CDATA[validateur]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zend_form]]></category>
		<category><![CDATA[zend_validate]]></category>
		<category><![CDATA[zf]]></category>

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

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

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

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

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

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

function suscribeAction ()

{

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

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

}

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

function editsubscriptionAction()

{

$form = new Form_Author();

$model = new Model_DbTable_Author();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

}

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

 $this-&gt;addElements(array($id, $email,$password, $password_verification, $sex, $name, $surname, $address, $zip_code, $city, $phone, $submit));
}
}
?&gt;
</pre>
<p>Dans le prochaine tutorial, nous verrons comment mettre en application tout ce que nous avons vu précédemment dans un &laquo;&nbsp;CRUD&nbsp;&raquo; (Create Read Update Delete) qui illustrera l&#8217;utilisateur du design-pattern MVC, Zend_Db, Zend_Form, Zend_Validate et Zend_Layout.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-tutoriel-4-creation-de-formulaire-et-validations-avec-zend_form-et-zend_validate/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ZFDebug (Scienta ZF Debug Bar) : une &quot;web debug toolbar&quot; pour Zend Framework</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-php/zfdebug-scienta-zf-debug-bar-une-web-debug-toolbar-pour-zend-framework/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zfdebug-scienta-zf-debug-bar-une-web-debug-toolbar-pour-zend-framework</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-php/zfdebug-scienta-zf-debug-bar-une-web-debug-toolbar-pour-zend-framework/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 15:02:48 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Debug bar]]></category>
		<category><![CDATA[Scienta ZF]]></category>
		<category><![CDATA[ZFDebug]]></category>

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

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

Bugs corrigés :

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

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

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

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

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

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

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

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

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

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

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

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

		}
	}
?></pre>
<p>La prochaine fois nous verrons le fonctionnement des formulaires avec Zend_Form</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-php/zend-framework-tutoriel-3-couche-modele-interaction-avec-une-base-de-donnees-avec-zend_db/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework tutoriel #2 : Layouts et design-pattern MVC</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-tutoriel-2-layouts-et-design-pattern-mvc/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-tutoriel-2-layouts-et-design-pattern-mvc</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-tutoriel-2-layouts-et-design-pattern-mvc/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 20:07:21 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Controller]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Layouts]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[View]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=413</guid>
		<description><![CDATA[Bien que l&#8217;on puisse utiliser Zend Framework comme une simple bibliothèque de classes, ce dernier propose des moyens et outils pour construire sa propre architecture.
Pour cela Zend propose une structure très standard et très connue des développeurs, le design-pattern MVC (Modèle Vue  [...]]]></description>
			<content:encoded><![CDATA[<p>Bien que l&#8217;on puisse utiliser Zend Framework comme une simple bibliothèque de classes, ce dernier propose des moyens et outils pour construire sa propre architecture.</p>
<p>Pour cela Zend propose une structure très standard et très connue des développeurs, le <strong>design-pattern MVC (Modèle Vue Contrôleur).</strong></p>
<p style="text-align: left;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/mvc.jpg"><img class="aligncenter size-full wp-image-415" title="Pattern MVC Model View Controller" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/mvc.jpg" alt="Pattern MVC Model View Controller" width="527" height="288" /><span id="more-413"></span></a></p>
<p style="text-align: left;">Petit rappel sur le modèle <strong>MVC</strong> : il consiste à séparer les trois parties fondamentales d&#8217;une application finale.</p>
<p style="text-align: left;">La première regroupe les <strong><span style="color: #3366ff;">traitements et l&#8217;intégritée</span></strong> des données. Elle s&#8217;occupe généralement des <strong><span style="color: #3366ff;">interactions avec la base de données</span></strong> avec une couche d&#8217;abstraction que nous verrons dans un prochain tutoriel.</p>
<p style="text-align: left;">La <strong><span style="color: #ff0000;">vue</span></strong> n&#8217;est autre que la partie interface graphique de l&#8217;application, c&#8217;est l&#8217;interface avec l&#8217;utilisateur et elle ne doit exercer aucun traitement.</p>
<p style="text-align: left;">Le <span style="color: #ff0000;"><strong>contrôleur</strong></span> est l&#8217;intermédiaire entre les 2 autres couches, il récupère les actions de d&#8217;utilisateurs et déclenche les traitements à effectuer.</p>
<p style="text-align: left;">Voici la couche Vue de notre application Zend de départ, on remarque qu&#8217;elle contient exclusivement le code HTML et le CSS ainsi que des variables  qui ne servent qu&#8217;à afficher des données :</p>
<p style="text-align: left;"><img class="aligncenter size-medium wp-image-417" title="ViewScreen" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ViewScreen-300x187.png" alt="ViewScreen" width="300" height="187" /></p>
<p style="text-align: left;">La couche contrôleur se comporte sous la forme d&#8217;une classe dérivée de <strong><span style="color: #3366ff;">Zend_Controller_Action</span></strong>, elle doit être nommé sous la forme NomController et il en est de même pour le fichier qui la contient. Dans notre <strong><span style="color: #3366ff;">IndexController</span></strong>, nous avons 2 méthodes par défaut : init() et <strong>indexAction()</strong>. La méthode <strong>init()</strong> est l&#8217;action à exécuter par défaut avant n&#8217;importe quelle autre action. On peut y mettre des traitements pour récupérer des variables en paramètres ou en session par exemple. La méthode IndexAction() est la méthode centrale du contrôleur, il s&#8217;agit de la page par défaut. Les vues du contrôleur doivent être regroupées dans un même répertoire et doivent porter le même nom que l&#8217;action avec l&#8217;extension *.phtml pour les templates.</p>
<p style="text-align: left;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ControllerScreen.png"><img class="aligncenter size-medium wp-image-418" title="ControllerScreen" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ControllerScreen-300x187.png" alt="ControllerScreen" width="300" height="187" /></a></p>
<p style="text-align: left;">Les urls fonctionnent de la façon suivante : <strong><span style="color: #ff0000;">racine/index.php/contrôleur/action</span></strong></p>
<p style="text-align: left;">Maintenant que nous sommes à l&#8217;aise avec le contrôleur et la vue, nous allons mettre en place un template principal qui sera la base graphique de notre application : il s&#8217;agit d&#8217;un layout.</p>
<p style="text-align: left;">On commence d&#8217;abord à paramètrer notre application, pour cela on se rend dans le application.ini dans le répertoire configs :</p>
<p style="text-align: left;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Layout_ApplicationINI.png"><img class="aligncenter size-medium wp-image-421" title="Layout_ApplicationINI" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Layout_ApplicationINI-300x187.png" alt="Layout_ApplicationINI" width="300" height="187" /></a></p>
<p style="text-align: left;">On y définit le répertoire, où nous allons placer nos fichiers de mise en page, par convention on choisira le répertoire application/layouts/scripts.</p>
<p style="text-align: left;">En suite nous allons modifier le Bootstrap et surcharger la méthode _initDoctype() qui définiera le doctype de notre page Web.</p>
<p style="text-align: left;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Layout_Bootstrap.png"><img class="aligncenter size-medium wp-image-422" title="Layout_Bootstrap" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Layout_Bootstrap-300x187.png" alt="Layout_Bootstrap" width="300" height="187" /></a></p>
<p style="text-align: left;">Nous pouvons maintenant créer le<strong><span style="color: #ff0000;"> layouts.phtml</span></strong> dans le répertoire <strong><span style="color: #ff0000;">/layours/scripts</span></strong> et y insérer les balises de contenue.</p>
<p style="text-align: left;">On pourra étendre ce layout à plusieurs fichiers comme un header, un footer, une sidebar par exemple.</p>
<p style="text-align: left;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Layout.png"><img class="aligncenter size-medium wp-image-424" title="Layout" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Layout-300x187.png" alt="Layout" width="300" height="187" /></a></p>
<p style="text-align: left;">C&#8217;est fini pour la structure MVC de Zend et la création de layouts, nous verrons dans le prochain tutoriel comment se comporte la couche modèle et les interactions avec la base de données et nous ferons notre première application CRUD (Create Read Upload Delete).</p>
<p style="text-align: left;">
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-tutoriel-2-layouts-et-design-pattern-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework #1 premier tutoriel : installation et création d&#039;un premier projet</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-premier-tutoriel-installation-et-creation-dun-premier-projet/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-premier-tutoriel-installation-et-creation-dun-premier-projet</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-premier-tutoriel-installation-et-creation-dun-premier-projet/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 14:05:10 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[tuto]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=369</guid>
		<description><![CDATA[Voici le premier tutoriel consacré au framework PHP5, pour cette première partie nous nous contenteront uniquement de réaliser une première installation du Framework dans sa version 1.8.4.

Pour mettre votre première application en oeuvre, il vous faudra tout d&#8217;abord un serveur Apache et PHP5, il  [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-375" title="ZendSuccess" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ZendSuccess-300x200.png" alt="ZendSuccess" width="300" height="200" />Voici le premier tutoriel consacré au framework PHP5, pour cette première partie nous nous contenteront uniquement de réaliser une première installation du Framework dans sa version 1.8.4.</p>
<p><span id="more-369"></span></p>
<p>Pour mettre votre première application en oeuvre, il vous faudra tout d&#8217;abord un serveur Apache et PHP5, il existe un grand nombre de solution pour vous faciliter son installation. Je conseille fortement les projets comme <a title="Wamp" href="http://www.wampserver.com/" target="_blank">WAMP</a> (Windows), <a title="Mamp" href="http://www.mamp.info">MAMP</a> (Mac) ou <a title="Xampp" href="http://www.apachefriends.org">XAMPP</a> (multi-plateforme). Les utilisateurs Linux utiliseront plutôt les paquets DEB et RPM fournient avec leur distribution ou une compilation à partir des sources pour les utilisateurs avancés.</p>
<p>Vérifier bien que votre installation fonctionne et que votre version de PHP est égale ou supérieur à la version 5.2.4, cela est nécessaire pour la version de Zend que nous utiliseront.</p>
<p>Tout d&#8217;abord il nous faut télécharger le framework sur <a href="http://framework.zend.com">le site de Zend</a>, pour cela il faut impérativement créer un compte. Ensuite télécharger soit la version complète soit la version light du framework sachant que la version complète comporte quasiment que des exemples et une intégration du framework javascript Dojo.</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ZendFrameworkWebSite.png"><img class="aligncenter size-medium wp-image-380" title="ZendFrameworkWebSite" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ZendFrameworkWebSite-300x187.png" alt="ZendFrameworkWebSite" width="300" height="187" /></a></p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/DownloadingZendFrameworkFull.png"><img class="aligncenter size-medium wp-image-382" title="DownloadingZendFrameworkFull" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/DownloadingZendFrameworkFull-300x187.png" alt="DownloadingZendFrameworkFull" width="300" height="187" /></a></p>
<p>Une fois le framework télécharger, il faudra créer un répertoire qui contiendra le framework et qui sera plus tard rélier à Apache. Dans notre exemple, on crée un dossier ZendFramework dans le workspace d&#8217;Eclipse. Il vous suffit de décompresser le contenu de l&#8217;archive téléchargée sur Zend dans le répertoire cible :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ExtractZendFrameworkToEclipseWorkspace.png"><img class="aligncenter size-medium wp-image-387" title="ExtractZendFrameworkToEclipseWorkspace" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ExtractZendFrameworkToEclipseWorkspace-300x187.png" alt="ExtractZendFrameworkToEclipseWorkspace" width="300" height="187" /></a></p>
<p>Il vous faudra ensuite utiliser la version CLI de PHP (Command Line Interface) pour générer les fichiers de notre premier projet grâce au ZendTools. Cette étape nécessite une configuration particulière si vous êtes sur Windows puisqu&#8217;il vous faudra créer une variable d&#8217;environnement pour éxécuter PHP. Les utilisateurs UNIX quant à eux pourront directement éxécuter l&#8217;application zf.php en CLI.</p>
<p>Pour faire cela, il suffit d&#8217;ouvrir une console et  de se rendre dans le répertoire &laquo;&nbsp;/bin&nbsp;&raquo; du framework. On constate qu&#8217;il y a deux fichiers exécutables le premier en .bat pour les utilisateurs Windows et le second en &laquo;&nbsp;.sh&nbsp;&raquo; pour les utilisateurs de systèmes UNIX.</p>
<p>Lorsque vous executez le script une première fois vous pourrez voir les fonctions que propose le ZendTool :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Hierarchy.png"><img class="aligncenter size-medium wp-image-388" title="Hierarchy" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Hierarchy-300x187.png" alt="Hierarchy" width="300" height="187" /></a></p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/zfFirst.png"><img class="aligncenter size-medium wp-image-389" title="zfTools" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/zfFirst-300x187.png" alt="zfTools" width="300" height="187" /></a></p>
<p>Pour créer notre premier projet que nous nommeront ZendBlog nous allons éxecutez la ligne de commande suivante :</p>
<p>&laquo;&nbsp;zf create project ZendBlog&nbsp;&raquo;</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/zfCreateProject.png"><img class="aligncenter size-full wp-image-391" title="zfCreateProject" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/zfCreateProject.png" alt="zfCreateProject" width="482" height="72" /></a></p>
<p>Nous avons générer notre première application, regardons la structure de cette dernière. En effet, elle comporte :</p>
<p>- un répertoire &laquo;&nbsp;controller&nbsp;&raquo; contenant les controlleurs du design-patterns MVC<br />
- un répertoire &laquo;&nbsp;views&nbsp;&raquo; contenant les templates PHP.<br />
- un répertoire &laquo;&nbsp;library&nbsp;&raquo; qui devra contenir les librairies du framework Zend<br />
- un répertoire &laquo;&nbsp;public&nbsp;&raquo; contenant l&#8217;index.php qui sera la page principale de notre application et qui devra être la page accessible à Apache.<br />
- un répertoire &laquo;&nbsp;test&nbsp;&raquo; contenant les tests unitaires de l&#8217;application.<br />
- un répertoire &laquo;&nbsp;model&nbsp;&raquo; pour les classes correspondantes à la couche d&#8217;abstraction à la base de données.</p>
<p style="text-align: center;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Hierarchy1.png"><img class="aligncenter size-medium wp-image-392" title="ZendFrameworkStructure" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Hierarchy1-300x187.png" alt="Hierarchy" width="300" height="187" /></a></p>
<p>Il vous faudra ensuite intégrer le répertoire Zend fournit avec l&#8217;archive dans le répertoire library de l&#8217;application sans cela,  rien ne pourra fonctionner et vous aurez l&#8217;erreur suivante sur votre application :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/PublicIndexWithFramework.png"><img class="aligncenter size-medium wp-image-395" title="PublicIndexWithoutFramework" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/PublicIndexWithFramework-300x187.png" alt="PublicIndexWithoutFramework" width="300" height="187" /></a></p>
<p>Une fois le framework installé, votre premier projet a été crée, il ne vous reste plus qu&#8217;à accéder à votre page &laquo;&nbsp;index.php&nbsp;&raquo; dans le répertoire &laquo;&nbsp;/public&nbsp;&raquo; et vous aurez le résultat suivant :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ZendSuccess1.png"><img class="aligncenter size-medium wp-image-394" title="ZendSuccess" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ZendSuccess1-300x200.png" alt="ZendSuccess" width="300" height="200" /></a></p>
<p>Voilà, c&#8217;est fini pour cette première partie, nous verrons prochainement comment fonctionne le modèle MVC sur le framework Zend et nous commenceront à génerer des &laquo;&nbsp;Layouts&nbsp;&raquo; pour mieux distinguer nos couches de présentations.</p>
<p>A très bientôt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-premier-tutoriel-installation-et-creation-dun-premier-projet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework : des tutoriaux avec vidéos très prochainement sur le Blog d&#039;Alex</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-des-tutoriaux-avec-videos-tres-prochainement-sur-le-blog-dalex/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-des-tutoriaux-avec-videos-tres-prochainement-sur-le-blog-dalex</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-des-tutoriaux-avec-videos-tres-prochainement-sur-le-blog-dalex/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 19:53:46 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Framework PHP]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=346</guid>
		<description><![CDATA[ L&#8217;ascension spectaculaire du framework de Zend notamment due à sa notoriété de &#171;&#160;standard&#160;&#187; mène à envisager une grosse utilisation future de cette plateforme de travail sponsorisée par Zend.
Le blog d&#8217;Alex vous proposera très prochainement des tutoriaux complets sur Zend Framework sous forme  [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-348" title="Zend Framework" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/banner_zf_logo1-300x178.jpg" alt="Zend Framework" width="300" height="178" /> L&#8217;ascension spectaculaire du framework de Zend notamment due à sa notoriété de &laquo;&nbsp;standard&nbsp;&raquo; mène à envisager une grosse utilisation future de cette plateforme de travail sponsorisée par Zend.</p>
<p>Le blog d&#8217;Alex vous proposera très prochainement des <span style="color: #ff0000;"><strong>tutoriaux complets</strong></span> sur Zend Framework sous forme d&#8217;<span style="color: #ff0000;"><strong>articles</strong></span> et de <span style="color: #ff0000;"><strong>podcasts vidéos</strong></span>.</p>
<p><span id="more-346"></span></p>
<p>En effet, Zend Framework est un <strong>framework PHP 5 orienté objet</strong> basé sur une grande bibilothèque de <strong>classes</strong> et de <strong>librairies</strong> fournissant des facilités de développement.</p>
<p>Contrairement à ses &laquo;&nbsp;concurrents&nbsp;&raquo; comme CakePHP, Symfony, Copix, Jelix &#8230; Zend ne fournit pas de façon native une structure et une architecture de de développement, en revanche il nous fournit les moyens de la construire. Souvent critiqué par son manque de rigueur et son architecture trop exhaustive, il n&#8217;en reste pas moins qu&#8217;il est souvent plébiscité par les entreprises et il est actuellement très utilisé par les SSII. Il est actuellement le framework PHP le plus utilisé en France avec le grand Symfony (beaucoup plus rigoureux mais extrèmement professionnel et robuste).</p>
<p>La philosophie du Zend Framework est d&#8217;offrir un ensemble d&#8217;outils de développement d&#8217;application Web tout en offrant un maximum de flexibilité au niveau architectural. Il s&#8217;appuit sur les fonctionnalités standard que l&#8217;on retrouve dans de nombreux frameworks :</p>
<p>- <span style="color: #3366ff;">design-pattern MVC</span> (Modèle Vue Controlleur)<br />
- <span style="color: #3366ff;">couche d&#8217;abstraction à la base de données</span> sous forme d&#8217;un système de DAO (Database Access Object) pour effectuer des requêtes dynamiques vers les bases de données et ce de façon générique (compatible avec Mysql, Oracle, Postgre, MS-SQL, SQL-Lite, IBM-DB2)<br />
- système de <span style="color: #3366ff;">cache</span> pour optimiser les calculs et les transactions avec les bases de données<br />
- des outils pour le <span style="color: #3366ff;">développement RAD</span> (Rapid Application Development)<br />
- <span style="color: #3366ff;">internationalisation I18N</span> pour la création et la gestion d&#8217;application totalement multilingues<br />
- un <span style="color: #3366ff;">système d&#8217;authentification</span>, d&#8217;autorisation et de gestion des sessions<br />
- un framework pour propulser ou exploiter des <span style="color: #3366ff;">Web Services</span><br />
- des fonctionnalités avancées pour l&#8217;exploitation des <span style="color: #3366ff;">emails</span> et la génération de <span style="color: #3366ff;">PDF</span><br />
- un <span style="color: #3366ff;">système de recherche</span> puissant<br />
- des créations de <span style="color: #3366ff;">formulaires</span> avec des fonctions de filtres, validateurs, &#8230;<br />
- un grand nombre d&#8217;<span style="color: #3366ff;">APIs</span> comme Google App, Amazon, &#8230;<br />
- un générateur de javascript basé sur le <span style="color: #3366ff;">framework Dojo </span>ainsi que des libraries pour <span style="color: #3366ff;">jQuery</span> depuis la version 1.7 avec ZendX</p>
<p>L&#8217;autre argument fort de PHP est qu&#8217;il est soutenu par Zend, l&#8217;entreprise à but commercial qui propulse PHP, cela rassure souvent les entreprises de savoir qu&#8217;il existe des entités commerciales derrière les technologies (cf succès de Sun et IBM avec Java et Microsoft .NET).<br />
Il aura pour vocation de se placer au même rang que les grands framework &laquo;&nbsp;standard&nbsp;&raquo; des autres langages tel un (Spring, Struts pour Java ou un Ruby on Rails pour Ruby).</p>
<p><strong>C&#8217;est pour ces raisons, que je vais prochainement diffuser des tutoriaux sous forme écrite et aussi sous forme vidéo podcast visant à donner un petit coup de pouce aux personnes débutants sur ce framework. Il s&#8217;agira principalement d&#8217;application simples et basique comme un CRUD mettant en pratique les principales fonctionnalités du Zend Framework, à savoir le design-pattern MVC, le routing avec le url_rewriting, les formulaires, les interactions avec les bases de données, les sessions et authentifications, &#8230;</strong></p>
<p>En espérant que ces tutoriaux aideront un maximum de personnes, je compte sur votre aide pour commenter mes publications.</p>
<p>A très bientôt.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">
<li class="toclevel-1"><a href="http://en.wikipedia.org/wiki/Zend_Framework#References"><span class="tocnumber">9</span> <span class="toctext">References</span></a></li>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-des-tutoriaux-avec-videos-tres-prochainement-sur-le-blog-dalex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 4/6 queries in 0.052 seconds using disk: basic
Object Caching 1983/1983 objects using disk: basic

Served from: www.alexandre-julien.com @ 2012-02-14 14:52:13 -->
