<?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>blogafab.com &#187; Framework</title>
	<atom:link href="http://www.blogafab.com/tag/framework/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.blogafab.com</link>
	<description>Le blog de Fabien Pennequin</description>
	<lastBuildDate>Mon, 11 Jan 2010 16:28:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Utiliser l&#8217;extension Taggable de Doctrine avec Symfony 1.3/1.4</title>
		<link>http://www.blogafab.com/utiliser-extension-taggable-doctrine-symfony/</link>
		<comments>http://www.blogafab.com/utiliser-extension-taggable-doctrine-symfony/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 16:28:27 +0000</pubDate>
		<dc:creator>Fabien</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.blogafab.com/?p=368</guid>
		<description><![CDATA[Jusqu&#8217;à symfony 1.2, si vous vouliez ajouter facilement de nouvelles fonctionnalités au framework PHP5 il fallait se diriger vers son importante base de plugins. Avec symfony 1.3 et 1.4, bien sûr vous pouvez toujours compter sur les plugins symfony mais viennent maintenant s&#8217;ajouter les extensions pour Doctrine&#8230; Si vous utilisez Doctrine comme Object Relational Mapper [...]]]></description>
			<content:encoded><![CDATA[<p>Jusqu&#8217;à symfony 1.2, si vous vouliez ajouter facilement de nouvelles fonctionnalités au framework PHP5 il fallait se diriger vers son importante base de plugins. Avec symfony 1.3 et 1.4, bien sûr vous pouvez toujours compter sur les <a href="http://www.symfony-project.org/plugins/">plugins symfony</a> mais viennent maintenant s&#8217;ajouter les <a href="http://www.doctrine-project.org/extensions">extensions pour Doctrine</a>&#8230;</p>
<p>Si vous utilisez Doctrine comme <a href="http://fr.wikipedia.org/wiki/Mapping_objet-relationnel">Object Relational Mapper (ORM)</a>, vous connaissez certainement les behaviours <em>Timestampable</em>, <em>Sluggable</em> ou encore <em>SoftDelete</em>. Les extensions Doctrine vous permettent justement d&#8217;en ajouter de nouveaux très facilement, en quelques clics ou lignes de commande.</p>
<p>Aujourd&#8217;hui, je vous propose d&#8217;installer et d&#8217;utiliser l&#8217;extension Taggable. Cette dernière permet d&#8217;ajouter des tags sur les modèles de votre choix. L&#8217;intérêt peut être de faire des recommandations ou retrouver des éléments relatifs à un autre.</p>
<p><span id="more-368"></span></p>
<p>Commençons d&#8217;abord par installer l&#8217;extension Taggable :</p>
<ol>
<li>Placez-vous dans le dossier racine de votre projet symfony.
<pre class="brush: bash;">cd /chemin/vers/le/projet/symfony/</pre>
</li>
<li>Créez un dossier <em>doctrine_extension</em> dans <em>lib</em>.
<pre class="brush: bash;">mkdir lib/doctrine_extension</pre>
</li>
<li>Téléchargez l&#8217;extension Taggable avec subversion.
<pre class="brush: bash;">svn co http://svn.doctrine-project.org/extensions/Taggable/branches/1.2-1.0 lib/doctrine_extension/Taggable</pre>
</li>
<li>Videz le cache symfony (peut-être plus nécessaire mais c&#8217;est encore un réflexe chez moi).
<pre class="brush: bash;">php symfony cc</pre>
</li>
<li>Activez l&#8217;extension Doctrine :
<ul>
<li>Éditez le fichier config/ProjectConfiguration.class.php</li>
<li>Si vous ne l&#8217;avez pas encore, créez la méthode <em>configureDoctrine</em>
<pre class="brush: php;">  public function configureDoctrine(Doctrine_Manager $manager)
  {
  }</pre>
</li>
<li>Ajoutez le code ci-dessous dans la méthode.
<pre class="brush: php;">    Doctrine::setExtensionsPath(sfConfig::get('sf_lib_dir').'/doctrine_extension');
    $manager-&gt;registerExtension('Taggable');</pre>
</li>
</ul>
</li>
</ol>
<p>Voilà l&#8217;extension avec maintenant installée et activée. Voyons maintenant, comment l&#8217;utiliser. Pour cela je vais prendre un exemple très simple avec des articles qui possèdent des tags.</p>
<ol>
<li>Définissez le modèle Article en copiant le contenu ci-dessous dans un fichier config/doctrine/10_articles.yml<br />
[yaml]Article:<br />
  actAs:<br />
    Taggable:<br />
  columns:<br />
    title:          { type: string(255), notnull: true, notblank: true }<br />
    body:           { type: clob, notnull: true, notblank: true }<br />
[/yaml]</li>
<li>Ajoutez des fixtures en copiant le contenu ci-dessous dans un fichier data/fixtures/10_articles.yml<br />
[yaml]Article:<br />
  Article_1:<br />
    title: Mon premier article<br />
    body: |<br />
      Hello World !<br />
      Ceci est mon premier article.<br />
    tags: hello, world, article 1</p>
<p>  Article_2:<br />
    title: Mon second article<br />
    body: |<br />
      Hello World !<br />
      Ceci est mon second article.<br />
    tags: hello, world, article 2<br />
[/yaml]</li>
<li>Créez les fichiers php associés au modèle et chargez les fixtures avec la commande suivante :
<pre class="brush: bash;">php symfony doctrine:build --all --and-load</pre>
</li>
<li>Créez un module Article dans l&#8217;application frontend
<pre class="brush: bash;">php symfony generate:module frontend article</pre>
</li>
<li>Éditez le fichier apps/frontend/modules/article/actions.class.php et remplacez le code de la méthode executeIndex par le code ci-dessous
<pre class="brush: php;">    $this-&gt;articles = Doctrine::getTable('Article')-&gt;findAll();
    $this-&gt;popular_tags = Doctrine::getTable('TaggableTag')-&gt;getPopularTags();</pre>
</li>
<li>Éditez le fichier apps/frontend/modules/article/indexSuccess.php et collez le code ci-dessous
<pre class="brush: php;">&lt;h1&gt;Articles&lt;/h1&gt;

&lt;h2&gt;Liste des articles&lt;/h2&gt;
&lt;?php foreach ($articles as $article): ?&gt;
  &lt;h3&gt;&lt;?php echo $article-&gt;title ?&gt;&lt;/h3&gt;
  &lt;p&gt;&lt;?php echo nl2br($article-&gt;body) ?&gt;&lt;/p&gt;
  &lt;p&gt;Tags : &lt;?php echo $article-&gt;getTagsString() ?&gt;&lt;/p&gt;
&lt;?php endforeach ?&gt;

&lt;h2&gt;Tags populaires&lt;/h2&gt;
&lt;ul&gt;
&lt;?php foreach ($popular_tags as $tag): ?&gt;
  &lt;li&gt;&lt;?php echo $tag-&gt;name ?&gt; (&lt;?php echo $tag-&gt;total_num ?&gt;)&lt;/li&gt;
&lt;?php endforeach ?&gt;
&lt;/ul&gt;</pre>
</li>
</ol>
<p>Si vous avez utilisez la sandbox symfony 1.4 pour suivre ce tutoriel, vous ne devriez pas avoir de problème. Toutefois, il existe quelques subtilités dans l&#8217;utilisation de l&#8217;extension Taggable que j&#8217;ai rencontré lors de son utilisation dans un projet réel. Je les mets ci-dessous, si vous en avez d&#8217;autres n&#8217;hésitez pas à le signaler dans les commentaires.</p>
<ul>
<li>Pour utiliser la table TaggableTag vous devez obligatoirement avoir chargé une autre table utilisant l&#8217;extension. Dans mon exemple, si vous inversez les deux lignes de la méthode executeIndex, vous obtiendrez une belle exception &laquo;&nbsp;Couldn&#8217;t find class TaggableTag&nbsp;&raquo;.</li>
<li>Si vous essayez de supprimer un élément &laquo;&nbsp;Taggable&nbsp;&raquo;, une exception sera levée. En effet, les tags associés à l&#8217;objet doivent être supprimés avant l&#8217;objet lui-même. Vous pouvez soit utiliser l&#8217;évènement preDelete pour supprimer les tags avant l&#8217;objet soit appliquer <a href="http://www.doctrine-project.org/jira/secure/attachment/10250/TaggableConstraintError.patch">le patch que j&#8217;ai proposé dans l&#8217;issue tracker de Doctrine</a> pour ajouter un <em>onDelete CASCADE</em> sur la relation.</li>
<li>Les relations many-to-many entre votre modèle &laquo;&nbsp;Taggable&nbsp;&raquo; et les tags sont ajoutées à la volée, il faut donc &laquo;&nbsp;charger&nbsp;&raquo; le modèle avant l&#8217;utilisation d&#8217;une de ces relations. Ainsi, si vous voulez afficher un nuage de tags avec la méthode getPopularTags, il faudra charger chaque modèle &laquo;&nbsp;Taggable&nbsp;&raquo; où alors vous n&#8217;aurez que les tags populaires des modèles déjà chargés.</li>
</ul>
<p>En conclusion, l&#8217;extension Taggable est très intéressante mais il subsiste quelques défauts qui peuvent bloquer son utilisation dans un projet concret. Si j&#8217;ai réussi à corriger les problèmes 1 et 2, le 3e reste non résolu pour le moment. La solution serait d&#8217;ajouter les relations dans les fichiers php générés par Doctrine lors de la création des modèles. Pas sûr que ce soit possible dans l&#8217;état actuel&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogafab.com/utiliser-extension-taggable-doctrine-symfony/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Critique du livre &#171;&#160;Symfony 1.3 Web Application Development&#160;&#187;</title>
		<link>http://www.blogafab.com/critique-livre-symfony-1-3-web-application-development/</link>
		<comments>http://www.blogafab.com/critique-livre-symfony-1-3-web-application-development/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 10:15:14 +0000</pubDate>
		<dc:creator>Fabien</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.blogafab.com/?p=348</guid>
		<description><![CDATA[Il y a quelques semaines, l&#8217;éditeur PacktPublishing m&#8217;a proposé d&#8217;écrire une critique de son livre fraichement sorti intitulé &#171;&#160;Symfony 1.3 Web Application Development&#160;&#187; et écrit par Tim Bowler et Wojciech Bancer. Comme son nom l&#8217;indique, le livre est consacré au framework PHP5 en vogue en ce moment, j&#8217;ai nommé symfony&#8230; &#171;&#160;Symfony 1.3 Web Application Development&#160;&#187; [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-352" title="symfony 1.3 book" src="http://www.blogafab.com/wp-content/uploads/2009/11/symfony-1.3-book-241x300.jpg" alt="symfony 1.3 book" width="" height="214" />Il y a quelques semaines, l&#8217;éditeur <a href="http://www.packtpub.com/">PacktPublishing</a> m&#8217;a proposé d&#8217;écrire une critique de son livre fraichement sorti intitulé &laquo;&nbsp;Symfony 1.3 Web Application Development&nbsp;&raquo; et écrit par Tim Bowler et Wojciech Bancer. Comme son nom l&#8217;indique, le livre est consacré au framework PHP5 en vogue en ce moment, j&#8217;ai nommé symfony&#8230;</p>
<p>&laquo;&nbsp;Symfony 1.3 Web Application Development&nbsp;&raquo; compte un peu plus de 200 pages que je viens tout juste de terminer. Alors, convaincu ou déçu ? Voici mon avis&#8230;</p>
<p><span id="more-348"></span></p>
<h3>Symfony dans tous ses états</h3>
<p>Contraire à ce que je pensais avant la lecture du livre, le public visé n&#8217;est pas les développeurs utilisant déjà symfony et ayant envie d&#8217;en savoir plus sur la version 1.3 du framework. Non, le livre est plutôt destiné aux personnes qui ont envie de commencer à utiliser symfony et d&#8217;apprendre à l&#8217;utiliser.</p>
<p>Le livre est très complet et couvre les principales fonctionnalités proposées par le framework symfony : <acronym title="Modèle Vue Contrôleur">MVC</acronym>, <acronym title="Object Relational Mapping">ORM</acronym>, templates, admin generator, form framework, cache, ou encore internationalisation (i18n). Autant dire qu&#8217;à la fin de la lecture, le développeur dispose d&#8217;une bonne connaissance du framework et est fin prêt pour commencer un nouveau projet avec. Si il trouve symfony un peu <em>faible</em> en fonctionnalités (rappelons que le but de Symfony c&#8217;est de fournir ce qui est commun à 99% dans tous les projets web), il y a même un chapitre sur l&#8217;intégration de composants du Zend Framework ou de eZ Components. Un très bon point à mon avis.</p>
<h3>Vous avez dit symfony 1.3 ?</h3>
<p>Malgré cela, &laquo;&nbsp;Symfony 1.3 Web Application Development&nbsp;&raquo; souffre malheureusement de quelques défauts&#8230;</p>
<p>Tout d&#8217;abord, on trouve un certain nombre de fautes par ci par là, tant au niveau du texte qu&#8217;au niveau code. Si vous appliquez à la lettre le code présent dans le livre votre application ne fonctionnera pas. Rien de très grave, un développeur avec un minimum de connaissance en PHP n&#8217;aura aucun mal à les repérer et à les corriger&#8230;</p>
<p>Ensuite, bien que symfony 1.3 soit présent dans le titre, il s&#8217;agit plus d&#8217;un livre sur la version 1.2. En effet, à part des screenshots et quelques détails, je dois bien avouer que je n&#8217;ai pas vu grand chose de la nouvelle mouture du framework et c&#8217;est bien dommage. Le livre est sorti un peu trop vite, les grandes nouveautés de la version 1.3 n&#8217;étaient alors pas encore disponibles. Ainsi, par exemple, sur la partie &laquo;&nbsp;envoi de mails&nbsp;&raquo;, le livre est déjà obsolète. On pourrait également regretter l&#8217;utilisation Propel malgré que Doctrine soit l&#8217;<acronym title="Object Relational Mapping">ORM</acronym> par défaut de symfony 1.3.</p>
<h3>Conclusion</h3>
<p>Que penser du livre &laquo;&nbsp;Symfony 1.3 Web Application Development&nbsp;&raquo; ? Tout dépend de votre profil et de vos attentes. Si vous connaissez déjà symfony et que vous voulez connaître la version 1.3, passez votre chemin ce n&#8217;est pas le but du livre. Au contraire, si vous êtes développeur PHP et que vous avez envie d&#8217;apprendre à l&#8217;utiliser, allez-y ! Le livre est bien écrit et les choses sont bien expliquées. Une fois la lecture terminée, si vous voulez utiliser à fond Symfony 1.3, jetez un coup d&#8217;œil à la page <a href="http://www.symfony-project.org/tutorial/1_4/en/whats-new">What&#8217;s new in symfony 1.3/1.4</a> pour découvrir les nouveautés, cela terminera votre apprentissage.</p>
<p>En résumé, un bon livre qui permettra à tout ceux qui n&#8217;utilisent pas encore symfony d&#8217;appréhender l&#8217;outil sans difficulté.</p>
<p><a href="http://www.packtpub.com/symfony-1-3-web-application-development?utm_source=blogafab.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_001299">Acheter &laquo;&nbsp;Symfony 1.3 Web Application Development&nbsp;&raquo; chez PacktPublishing</a><br />
<a href="http://www.amazon.fr/gp/product/1847194567?ie=UTF8&amp;tag=blogafab-21&amp;linkCode=as2&amp;camp=1642&amp;creative=19458&amp;creativeASIN=1847194567">Acheter &laquo;&nbsp;Symfony 1.3 Web Application Development&nbsp;&raquo; sur Amazon.fr</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogafab.com/critique-livre-symfony-1-3-web-application-development/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Symfony : Gérer un formulaire dans un composant</title>
		<link>http://www.blogafab.com/symfony-gerer-un-formulaire-dans-un-composant/</link>
		<comments>http://www.blogafab.com/symfony-gerer-un-formulaire-dans-un-composant/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 09:20:58 +0000</pubDate>
		<dc:creator>Fabien</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.blogafab.com/?p=275</guid>
		<description><![CDATA[Dans un projet Symfony, comment gérer la validation d&#8217;un formulaire lorsqu&#8217;il est dans un composant ? C&#8217;est la question que l&#8217;on m&#8217;a posé cette semaine la semaine dernière (le temps passe vite&#8230;). Tout d&#8217;abord, qu&#8217;est-ce qu&#8217;un composant dans Symfony ? Il s&#8217;agit en quelque sorte d&#8217;une action qui est réutilisable entre les différents modules de [...]]]></description>
			<content:encoded><![CDATA[<p><em>Dans un projet Symfony, comment gérer la validation d&#8217;un formulaire lorsqu&#8217;il est dans un composant ?</em> C&#8217;est la question que l&#8217;on m&#8217;a posé <span style="text-decoration: line-through;">cette semaine</span> la semaine dernière (le temps passe vite&#8230;).</p>
<p>Tout d&#8217;abord, qu&#8217;est-ce qu&#8217;un composant dans Symfony ? Il s&#8217;agit en quelque sorte d&#8217;une action qui est réutilisable entre les différents modules de l&#8217;application. A la différence des &laquo;&nbsp;partials&nbsp;&raquo;, qui sont &laquo;&nbsp;que&nbsp;&raquo; des templates, les composants contiennent de la logique : le plus souvent, récupérer un ou plusieurs modèles.</p>
<p>Pour revenir à la question, le problème n&#8217;est pas de gérer la validation à proprement parler, Symfony va s&#8217;en occuper grâce au <em>forms framework</em> mais plutôt de savoir où envoyer le visiteur une fois le formulaire soumis et comment, à la fin, le rediriger sur la page initiale, celle où il a rempli le formulaire.</p>
<p><span id="more-275"></span></p>
<p>Une solution possible est de créer une action spécifique pour valider le formulaire et d&#8217;ajouter un champ caché &laquo;&nbsp;referer&nbsp;&raquo; contenant l&#8217;url de la page initiale. Dans le fonctionnement, c&#8217;est relativement simple, le formulaire du composant pointe vers l&#8217;action et lorsque les données saisies sont valides, l&#8217;utilisateur est redirigé vers le valeur du champ &laquo;&nbsp;referer&nbsp;&raquo;.</p>
<p>Pour les intéressés, vous trouverez ci-dessous le contenu des différents fichiers pour l&#8217;utilisation d&#8217;un formulaire en composant. C&#8217;est prévu pour fonctionner avec Symfony 1.2.</p>
<ol>
<li>Le formulaire (<em>lib/form/TestForm.class.php</em>)

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php
<span style="color: #000000; font-weight: bold;">class</span> TestForm <span style="color: #000000; font-weight: bold;">extends</span> sfForm
<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> configure<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setWidgets</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
			<span style="color: #0000ff;">'name'</span>    <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">new</span> sfWidgetFormInput<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
			<span style="color: #0000ff;">'referer'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">new</span> sfWidgetFormInputHidden<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
		<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setValidators</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
			<span style="color: #0000ff;">'name'</span>    <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">new</span> sfValidatorString<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
			<span style="color: #0000ff;">'referer'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000000; font-weight: bold;">new</span> sfValidatorString<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'required'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
		<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">widgetSchema</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setNameFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'test-form[%s]'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li>Le composant (<em>apps/frontend/modules/mymodule/actions/components.class.php</em>)

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php
<span style="color: #000000; font-weight: bold;">class</span> mymoduleComponents <span style="color: #000000; font-weight: bold;">extends</span> sfComponents
<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> executeTestForm<span style="color: #009900;">&#40;</span>sfWebRequest <span style="color: #000088;">$request</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">form</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> TestForm<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
			<span style="color: #0000ff;">'referer'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$request</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getUri</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li>Le template du composant (<em>apps/frontend/modules/mymodule/templates/_TestForm.php</em>)

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;h2&gt;My Form&lt;/h2&gt;
&lt;form action=&quot;&lt;?php echo url_for('test-form') ?&gt;&quot; method=&quot;post&quot;&gt;
  &lt;table&gt;
    &lt; ?php echo $form ?&gt;
  &lt;/table&gt;
  &lt;input type=&quot;submit&quot; value=&quot;Send&quot; /&gt;
&lt;/form&gt;</pre></div></div>

</li>
<li>L&#8217;action (<em>apps/frontend/modules/mymodule/actions/actions.class.php</em>)

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php
<span style="color: #000000; font-weight: bold;">class</span> mymoduleActions <span style="color: #000000; font-weight: bold;">extends</span> sfActions
<span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> executeTestForm<span style="color: #009900;">&#40;</span>sfWebRequest <span style="color: #000088;">$request</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">form</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> TestForm<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
			<span style="color: #0000ff;">'referer'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$request</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getUri</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$request</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isMethod</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'post'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$request</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getParameter</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isValid</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">redirect</span><span style="color: #009900;">&#40;</span>
					<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'referer'</span><span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'referer'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">'homepage'</span>
				<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li>Le template de l&#8217;action (<em>apps/frontend/modules/mymodule/templates/TestFormSuccess.php</em>)

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php include_partial<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'TestForm'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'form'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$form</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

</li>
<li>La règle de routage (<em>apps/frontend/config/routing.yml</em>)

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">test-form:
  url:    /test-form
  param:  { module: mymodule, action: TestForm }</pre></div></div>

</li>
</ol>
<p>Une fois tous les fichiers créés, il ne reste plus qu&#8217;à inclure le composant dans un template, par exemple <em>apps/frontend/layout.php</em>, en ajoutant ceci :</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php include_component<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'mymodule'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'TestForm'</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Ici, le formulaire ne sert absolument à rien, la valeur saisie n&#8217;est pas utilisée. Il s&#8217;agit juste d&#8217;un exemple pour montrer le principe. <img src='http://www.blogafab.com/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png' alt=';-)' class='wp-smiley' /> </p>
<p>Note : Attention WordPress à ajouté un espace entre <em>&lt;</em> et <em>?php</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogafab.com/symfony-gerer-un-formulaire-dans-un-composant/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Symfony : Utiliser un fichier de config personnalisé</title>
		<link>http://www.blogafab.com/symfony-utiliser-un-fichier-de-config-personnalise/</link>
		<comments>http://www.blogafab.com/symfony-utiliser-un-fichier-de-config-personnalise/#comments</comments>
		<pubDate>Mon, 11 May 2009 19:13:12 +0000</pubDate>
		<dc:creator>Fabien</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.blogafab.com/?p=252</guid>
		<description><![CDATA[Lorsque l&#8217;on développe un projet, on a (presque?) toujours un certain nombre de paramètres propres à ce dernier. Cela peut-être le nom du site internet, la clé d&#8217;accès à un WebService ou encore la taille des miniatures à générer. De façon générale, il s&#8217;agit de tous ces paramètres communs à la fois au frontend et [...]]]></description>
			<content:encoded><![CDATA[<p>Lorsque l&#8217;on développe un projet, on a (presque?) toujours un certain nombre de paramètres propres à ce dernier. Cela peut-être le nom du site internet, la clé d&#8217;accès à un WebService ou encore la taille des miniatures à générer. De façon générale, il s&#8217;agit de tous ces paramètres communs à la fois au <em>frontend</em> et au <em>backend</em> du projet.</p>
<p>Tout bon développeur qui se respecte, je ne laisserai pas ce genre de paramètre perdu dans la logique métier. Tout d&#8217;abord parce que ça n&#8217;a absolument rien à faire là et ensuite parce qu&#8217;il ne serait pas facile de modifier le paramètre plus tard. Une bonne pratique est donc de créer un fichier à part pour stocker ces paramètres&#8230;</p>
<p><span id="more-252"></span></p>
<p>Dans symfony, il y a un fichier de paramètres pour les applications (apps/<em>monapp</em>/config/app.yml) et un pour les modules (apps/<em>monapp</em>/modules/<em>monmodule</em>/config/module.yml) mais pour tout le projet il n&#8217;y aucun fichier pré-défini par défaut. Heureusement, symfony est un framework très flexible et l&#8217;on peut ainsi ajouter un nouveau fichier de config en quelques lignes seulement&#8230;</p>
<p>Pour les intéressés, voici la procédure :</p>
<ol>
<li>Créez un fichier nommé config_handlers.yml dans le dossier config</li>
<li>Copiez dans le fichier précédemment créé le code ci-dessous :

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">config/project.yml:
  class:		sfDefineEnvironmentConfigHandler
  param:
    prefix: project_</pre></div></div>

</li>
<li>Créez le fichier config/project.yml et ajoutez quelques paramètres. Par exemple :

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">all:
  website:
    name: Mon site internet</pre></div></div>

</li>
<li>Il faut maintenant charger les paramètres pour chaque application du projet.
<ul>
<li>Modifiez le fichier config/ProjectConfiguration.class.php</li>
<li>Ajoutez une fonction loadProjectConfig :

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">	protected <span style="color: #000000; font-weight: bold;">function</span> loadProjectConfig<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		static <span style="color: #000088;">$load</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$load</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$this</span> instanceof sfApplicationConfiguration<span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #b1b100;">require</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getConfigCache</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">checkConfig</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'config/project.yml'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$load</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li>Chargez le fichier de config en ajoutant le code ci-dessous dans la méthode setup de la classe :

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">loadProjectConfig</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

</li>
</ul>
</li>
<li>C&#8217;est fini !</li>
</ol>
<p>Vous pouvez maintenant, dans les applications de votre projet, accéder aux paramètres définis dans project.yml en utilisant <code lang="php">sfConfig::get('project_...')</code>.</p>
<p>Attention, si comme moi vous écrivez des tests automatisés pour vos projets, pour les tests unitaires, il faudra ajouter un ligne afin de charger le fichier de config personnalisé :</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$configuration</span> <span style="color: #339933;">=</span> ProjectConfiguration<span style="color: #339933;">::</span><span style="color: #004000;">getApplicationConfiguration</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'frontend'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'test'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Je vous conseille d&#8217;ailleurs d&#8217;écrire un bootstrap avec cette ligne plutôt que de la copier/coller dans chaque fichier de test <img src='http://www.blogafab.com/wp-content/plugins/smilies-themer/Silk/emoticon_wink.png' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogafab.com/symfony-utiliser-un-fichier-de-config-personnalise/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Mes premiers pas avec symfony</title>
		<link>http://www.blogafab.com/mes-premiers-pas-avec-symfony/</link>
		<comments>http://www.blogafab.com/mes-premiers-pas-avec-symfony/#comments</comments>
		<pubDate>Sun, 27 Jul 2008 15:34:50 +0000</pubDate>
		<dc:creator>Fabien</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[SimpleTest]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.blogafab.com/?p=120</guid>
		<description><![CDATA[Voilà maintenant quelques jours que j&#8217;ai commencé à utiliser le framework symfony&#8230; J&#8217;avais déjà testé dans le passé deux autres frameworks, à savoir Ruby On Rails et Zend Framework. Ils ne m&#8217;avaient pas vraiment convaincu en terme de rapidité de développement. Je précise toutefois que je les avais utilisé à leur début, les choses se [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img style="border:0" title="logo symfony" src="http://www.blogafab.com/wp-content/uploads/2008/07/symfony.gif" alt="" width="275" height="75" /></p>
<p>Voilà maintenant quelques jours que j&#8217;ai commencé à utiliser le framework symfony&#8230; J&#8217;avais déjà testé dans le passé deux autres frameworks, à savoir <em>Ruby On Rails</em> et <em>Zend Framework</em>. Ils ne m&#8217;avaient pas vraiment convaincu en terme de rapidité de développement. Je précise toutefois que je les avais utilisé à leur début, les choses se sont sûrement améliorées mais j&#8217;avais très envie de tester symfony <img src='http://www.blogafab.com/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png' alt=':-)' class='wp-smiley' /> </p>
<p><span id="more-120"></span></p>
<h3>Découverte de symfony</h3>
<p>Pour faire mes premiers pas avec symfony, après avoir procédé à  <a href="http://www.symfony-project.org/installation/1_1">l&#8217;installation de la version 1.1</a>, je me suis dirigé vers le tutoriel <a href="http://www.symfony-project.org/tutorial/1_1/my-first-project">My First Project</a>. Il est plutôt bien fait, tout est expliqué en détails. Cela dit, je ne l&#8217;ai pas fait en entier, après avoir appris les bases du framework, je suis parti sur le tutoriel <a href="http://www.symfony-project.org/askeet/1_0/en/">Askeet</a>.</p>
<p>Le tutoriel <a href="http://www.symfony-project.org/askeet/1_0/en/">Askeet</a> est très bien fait et pour une fois on ne nous propose pas créer une bibliothèque/dvdthèque ou un blog mais une application dans le genre de <a href="http://answers.yahoo.com/">Yahoo! Answers</a>. Le petit problème avec ce tutoriel c&#8217;est qu&#8217;il est écrit pour le version 1.0 de symfony et que moi je voulais utiliser la dernière version, la 1.1. Bon, en réalité, on peut réussir à s&#8217;en sortir avec la 1.1, il faudra adapter le code parfois. Le plus gros du travail concerne les formulaires mais c&#8217;est alors l&#8217;occasion de lire le tutoriel <a href="http://www.symfony-project.org/book/forms/1_1/en/">symfony Forms in Action</a> et de le mettre en pratique. Ça a été très instructif ! J&#8217;ai arrêté le tutoriel après une dizaine de jours (le tutoriel est organisation sous la forme d&#8217;un calendrier de l&#8217;Avant) estimant en avoir assez vu pour savoir si j&#8217;allais utilisé symfony ou non.</p>
<h3>Mon avis</h3>
<p>La première chose qui m&#8217;a surpris, dans le bon sens, avec symfony c&#8217;est les outils de débuggage. En effet, il est possible d&#8217;afficher tout un cas d&#8217;informations comme les requêtes SQL exécutées, les logs ou encore la configuration très facilement. Ces outils se présentent sous la forme d&#8217;une barre en haut à droite qui vous suit partout.</p>
<p>Ensuite, symfony est d&#8217;une facilité déconcertante ! En quelques lignes on se génère les classes &laquo;&nbsp;models&nbsp;&raquo;, on créé une application , un module, une page. Des bonnes connaissances en programmation orientée objet sont toutefois nécessaires.</p>
<p>Un autre détail que j&#8217;ai trouvé très bien, c&#8217;est le &laquo;&nbsp;Form Framework&nbsp;&raquo;. Il permet de gérer un formulaire très simplement. Il suffit de définir les champs et les validateurs à appliquer, le framework va alors s&#8217;occupe de générer le formulaire, de valider les données lors de l&#8217;envoi et le cas échéant retourner le formulaire avec les erreurs et les valeurs précédemment saisies pré-remplies.</p>
<p>Il y a un point sur lequel je suis assez partagé : <a href="http://www.symfony-project.org/book/1_1/15-Unit-and-Functional-Testing">le testeur de symfony</a>. Peut-être suis-je trop habitué à <a href="http://simpletest.org/">SimpleTest</a> ? Je pense que je reviendrais sur ce point dans un prochain billet (avec un plugin pour l&#8217;améliorer ?).</p>
<h3>Conclusion</h3>
<p>En seulement quelques jours, je n&#8217;ai pas pu découvrir toutes les fonctionnalités de symfony. Toutefois, j&#8217;en ai vu assez pour savoir qu&#8217;il est très puissant, assez facile à prendre en main (pour un développeur maitrisant la POO) et extensible. Je n&#8217;en ai pas parlé mais on peut ajouter des plugins et il en existe déjà de nombreux (voir la <a href="http://trac.symfony-project.org/wiki/SymfonyPlugins">liste des plugins symfony</a>).</p>
<p>Symfony est un outil que je pourrais utiliser pour réaliser un projet sans problème. C&#8217;est très agréable de développer avec !</p>
<p>Et maintenant, il me tarde de créer mes premières <a href="http://www.symfony-project.org/cookbook/1_1/en/tasks">tasks</a>, de tester <a href="http://www.symfony-project.org/book/1_1/17-Extending-Symfony#Events">le système d&#8217;évènements</a>, d&#8217;utiliser <a href="http://www.symfony-project.org/book/1_1/13-I18n-and-L10n">l&#8217;internationalisation (i18n)</a>, créer mon premier plugin, de tester les tasks i18n:extract, pour extraire les chaînes à traduire, et i18n:find pour trouver les chaînes non-traduites, &#8230; <img src='http://www.blogafab.com/wp-content/plugins/smilies-themer/Silk/emoticon_grin.png' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogafab.com/mes-premiers-pas-avec-symfony/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mootools, framework javascript</title>
		<link>http://www.blogafab.com/mootools-framework-javascript/</link>
		<comments>http://www.blogafab.com/mootools-framework-javascript/#comments</comments>
		<pubDate>Thu, 08 Feb 2007 18:19:43 +0000</pubDate>
		<dc:creator>Fabien</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Mootools]]></category>

		<guid isPermaLink="false">http://www.blogafab.com/?p=26</guid>
		<description><![CDATA[Mootools est une librairie javascript qui permet, notamment, d&#8217;utiliser AJAX et de créer de jolis effets sur un site web. Jusque là rien de nouveau, il en existe déjà un certain nombre sur internet mais l&#8217;une des qualités de mootools est d&#8217;être léger ce qui le point faible actuel des autres frameworks&#8230; La page de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center"><img src="http://www.blogafab.com/wp-content/uploads/2007/06/mootools_logo.png" alt="Logo Mootools" /></p>
<p><a href="http://mootools.net/">Mootools</a> est une librairie javascript qui permet, notamment, d&#8217;utiliser AJAX et de créer de jolis effets sur un site web. Jusque là rien de nouveau, il en existe déjà un certain nombre sur internet mais l&#8217;une des qualités de mootools est d&#8217;être léger ce qui le point faible actuel des autres frameworks&#8230;</p>
<p><a href="http://mootools.net/download/">La page de téléchargement de Mootools</a> permet de se créer un framework personnalisé en choisissant uniquement les fonctions que l&#8217;on souhaite. On a ainsi une librairie javascript qui correspond vraiment à ses besoins.</p>
<p><a href="http://docs.mootools.net">La documentation</a> de la librairie est également une belle réussite : claire, précise et complète.</p>
<p>La version 1 de Mootools est disponible depuis quelques jours sur <a href="http://mootools.net">mootools.net</a> <img src='http://www.blogafab.com/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogafab.com/mootools-framework-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Les frameworks</title>
		<link>http://www.blogafab.com/les-frameworks/</link>
		<comments>http://www.blogafab.com/les-frameworks/#comments</comments>
		<pubDate>Thu, 16 Mar 2006 22:26:58 +0000</pubDate>
		<dc:creator>Fabien</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.blogafab.com/?p=7</guid>
		<description><![CDATA[Avec Rails et le Zend Framework, les frameworks sont de nouveau d&#8217;actualité. Ces derniers jours, j&#8217;ai commencé à m&#8217;intéresser aux frameworks PHP. Le plus récent est le Zend Framework. On entend beaucoup parler de lui en ce moment sur Internet. J&#8217;ai rapidement regardé le code et la liste des fonctionnalités, rien ne semble si exceptionnel [...]]]></description>
			<content:encoded><![CDATA[<p>Avec Rails et le <a href="http://framework.zend.com/">Zend Framework</a>, les frameworks sont de nouveau d&#8217;actualité. <img src='http://www.blogafab.com/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png' alt=':-)' class='wp-smiley' /> </p>
<p>Ces derniers jours, j&#8217;ai commencé à m&#8217;intéresser aux frameworks PHP. Le plus récent est le <em>Zend Framework</em>. On entend beaucoup parler de lui en ce moment sur Internet. J&#8217;ai rapidement regardé le code et la liste des fonctionnalités, rien ne semble si exceptionnel que ça. Faut-il le tester pour découvrir ce qui fait de lui un framework si intéressant ?</p>
<p>Au sujet des frameworks PHP, <em>JournalDuNet</em> a publié mardi un article intéressant : <a href="http://developpeur.journaldunet.com/tutoriel/php/060313-php-panorama-frameworks.shtml">10 frameworks PHP</a></p>
<p>Sinon, <a href="http://fr.wikipedia.org/wiki/Liste_des_Frameworks_PHP">Wikipédia propose une liste de frameworks PHP</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogafab.com/les-frameworks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby On Rails vous connaissez ?</title>
		<link>http://www.blogafab.com/ruby-on-rails-vous-connaissez/</link>
		<comments>http://www.blogafab.com/ruby-on-rails-vous-connaissez/#comments</comments>
		<pubDate>Tue, 07 Mar 2006 16:52:29 +0000</pubDate>
		<dc:creator>Fabien</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Ruby On Rails]]></category>

		<guid isPermaLink="false">http://www.blogafab.com/?p=6</guid>
		<description><![CDATA[A force d&#8217;en entendre parler, je me suis décidé à tester ce fameux Ruby On Rails. Pour ceux qui ne connaissent pas, allez lire la page à ce sujet sur Wikipédia. La première étape consiste à installer Ruby et Rails sur son PC (ou Mac ). Je les ai installé de façon &#171;&#160;manuelle&#160;&#187; mais j&#8217;ai [...]]]></description>
			<content:encoded><![CDATA[<p>A force d&#8217;en entendre parler, je me suis décidé à tester ce fameux <a href="http://www.rubyonrails.org/" target="_blank">Ruby On Rails</a>. Pour ceux qui ne connaissent pas, allez lire <a href="http://fr.wikipedia.org/wiki/Ruby_on_Rails">la page à ce sujet sur Wikipédia</a>.</p>
<p>La première étape consiste à installer Ruby et Rails sur son PC (ou Mac <img src='http://www.blogafab.com/wp-content/plugins/smilies-themer/Silk/emoticon_smile.png' alt=':-)' class='wp-smiley' /> ). Je les ai installé de façon &laquo;&nbsp;manuelle&nbsp;&raquo; mais j&#8217;ai appris après qu&#8217;il existait une sorte d&#8217;EasyPHP pour <acronym title="Ruby On Rails">RoR</acronym> : <a href="http://instantrails.rubyforge.org/wiki/wiki.pl">Instant Rails</a>. Je ne l&#8217;ai pas testé mais à priori, ça fonctionne. Si l&#8217;installation <em>manuelle</em> intéresse certaines personnes, je pourrai faire un autre billet ;-).</p>
<p><span id="more-6"></span></p>
<p><strong>Premiers pas</strong><br />
<em>Ruby On Rails</em> installé, je peux enfin passer à l&#8217;action. <img src='http://www.blogafab.com/wp-content/plugins/smilies-themer/Silk/emoticon_grin.png' alt=':D' class='wp-smiley' /> Je me suis d&#8217;abord créer un dossier <em>rails</em> sur mon disque de développement. Ce dossier contiendra toutes les applications Rails. Maintenant via l&#8217;invite de commandes (cmd.exe), je me place dans le dossier (dans mon cas c&#8217;est <em>rails</em>) et je créé ma première application via la commande :<br />
<code>rails mon_appli</code></p>
<p>Un ensemble de dossiers et de fichiers a normalement été créé. Vous pouvez maintenant accéder à votre première application. Pour cela, placez-vous dans le dossier <em>mon_appli</em> (<em>cd mon_appli</em>) puis lancez la commande :<br />
<code>ruby script\server</code></p>
<p>En allant à l&#8217;adresse <a href="http://127.0.0.1:3000/">http://127.0.0.1:3000/</a> vous devriez voir une page de bienvenue ^^<br />
Surtout ne fermez pas l&#8217;invite de commandes !</p>
<p><strong>C&#8217;est bien beau tout ça mais comment je créé une page ?</strong><br />
C&#8217;est tout simple :</p>
<ol type="1">
<li>Lancez une nouvelle <em>invite de commandes</em></li>
<li>Placez vous dans le dossier <em>mon_appli</em></li>
<li>Lancez la commande <code>ruby script\generate controller Fabien_IBF</code></li>
<li>Allez dans le dossier <em>mon_appli</em> (plus via cmd.exe) puis dans <em>app</em> et enfin dans <em>controllers</em>.</li>
<li>Clic droit sur le fichier <em>fabien_ibf_controller.rb</em> et cliquez sur <em>Modifier</em>.</li>
</ol>
<p>Le contenu du fichier devrait être le suivant :<br />
<code>class FabienIBFController &gt; ApplicationController<br />
end</code><br />
En-dessous de :<br />
<code>class FabienIBFController &gt; ApplicationController</code></p>
<p>Ajoutez :<br />
<code> def index<br />
render_text "Ma première page"<br />
end</code></p>
<p>Votre page est visible à l&#8217;adresse : <a href="http://127.0.0.1:3000/Fabien_IBF">http://127.0.0.1:3000/Fabien_IBF</a></p>
<p>Si vous voulez une page &#8216;ma_page_2&#8242;, il suffit d&#8217;ajouter en-dessous :<br />
<code> def ma_page_2<br />
render_text "Ma deuxième page"<br />
end</code></p>
<p>Vous pouvez la voir à l&#8217;adresse suivante : <a href="http://127.0.0.1:3000/Fabien_IBF/ma_page_2">http://127.0.0.1:3000/Fabien_IBF/ma_page_2</a></p>
<p><strong>Conclusion</strong><br />
Je m&#8217;arrête là mais <acronym title="Ruby On Rails">RoR</acronym> permet de faire bien plus. Je vous invite à tester <a href="http://www.typosphere.org/">Typo</a> un moteur de blog très sympa.</p>
<p>Pour un framework aussi récent (la version 1.0 est sortie le 14 décembre 2005), je trouve que <a href="http://www.rubyonrails.org/" target="_blank">Ruby On Rails</a> s&#8217;en sort bien. <acronym title="Ruby On Rails">RoR</acronym> permet de gagner beaucoup de temps dans le développement d&#8217;une application web (voir la vidéo &laquo;&nbsp;Créer un blog en 15 minutes&nbsp;&raquo; sur le site officiel du framework). Pour le moment le problème c&#8217;est les hébergeurs. A ma connaissance, en France, seul <a href="http://www.typhon.net/" target="_blank">Typhon</a> propose <a href="http://www.typhon.net/fr/OffreRails">des offres avec Ruby On Rails</a>. Espérons que d&#8217;autres hébergeurs s&#8217;y mettent aussi rapidement&#8230;</p>
<p>Je vais continuer à explorer ce framework et qui sait peut-être que je sortirai bientôt ma première application <acronym title="Ruby On Rails">RoR</acronym> ^^</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogafab.com/ruby-on-rails-vous-connaissez/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
