<?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>Miximum &#187; snippet</title>
	<atom:link href="http://www.miximum.fr/tag/snippet/feed" rel="self" type="application/rss+xml" />
	<link>http://www.miximum.fr</link>
	<description>Le blog d&#039;un ingénieur web freelance</description>
	<lastBuildDate>Wed, 16 Nov 2011 16:25:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Texte en couleur dans les scripts PHP</title>
		<link>http://www.miximum.fr/inclassable/133-texte-en-couleur-dans-les-scripts-php</link>
		<comments>http://www.miximum.fr/inclassable/133-texte-en-couleur-dans-les-scripts-php#comments</comments>
		<pubDate>Fri, 06 Mar 2009 11:18:54 +0000</pubDate>
		<dc:creator>thibault</dc:creator>
				<category><![CDATA[Inclassable]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[snippet]]></category>

		<guid isPermaLink="false">http://www.miximum.fr/?p=133</guid>
		<description><![CDATA[photo credit&#160;: Charles Collier Je cherchais comment rendre du texte en couleur dans des scripts PHP en ligne de commande. Petite solution rapide, adapt&#233;e d&#8217;un script en ruby fourni par un sympathique pote. Libre &#224; vous de rajouter des fonctions avec plus de couleurs&#8230; function color&#40; $text, $color &#41; &#123; printf&#40; &#34;%c%s%s%c[0m\n&#34;, 27, $color, $text, [...]]]></description>
			<content:encoded><![CDATA[<div class="postimg alignleft"><a href="http://www.flickr.com/photos/7311038@N03/3094175900/" title="Epices d'ailleurs" target="_blank"><img src="http://farm4.static.flickr.com/3096/3094175900_e93f879e6c_m.jpg" alt="Epices d'ailleurs" border="0" /></a><br /><small><a href="http://creativecommons.org/licenses/by-nd/2.0/" title="Attribution-NoDerivs License" target="_blank"><img src="http://www.miximum.fr/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" border="0" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit&nbsp;: <a href="http://www.flickr.com/photos/7311038@N03/3094175900/" title="Charles Collier" target="_blank">Charles Collier</a></small></div>
<p>Je cherchais comment rendre du texte en couleur dans des scripts PHP en ligne de commande.</p>
<p>Petite solution rapide, adapt&eacute;e d&#8217;un script en ruby fourni par un sympathique pote.</p>
<p>Libre &agrave; vous de rajouter des fonctions avec plus de couleurs&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="kw2">function</span> color<span class="br0">&#40;</span> <span class="re0">$text</span><span class="sy0">,</span> <span class="re0">$color</span> <span class="br0">&#41;</span>
<span class="br0">&#123;</span>
   <a href="http://www.php.net/printf"><span class="kw3">printf</span></a><span class="br0">&#40;</span> <span class="st0">&quot;<span class="es6">%c</span><span class="es6">%s</span><span class="es6">%s</span><span class="es6">%c</span>[0m<span class="es1">\n</span>&quot;</span><span class="sy0">,</span> <span class="nu0">27</span><span class="sy0">,</span> <span class="re0">$color</span><span class="sy0">,</span> <span class="re0">$text</span><span class="sy0">,</span> <span class="nu0">27</span> <span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw2">function</span> red<span class="br0">&#40;</span> <span class="re0">$text</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span> color<span class="br0">&#40;</span> <span class="re0">$text</span><span class="sy0">,</span> <span class="st0">&quot;[31m&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="br0">&#125;</span>
<span class="kw2">function</span> blue<span class="br0">&#40;</span> <span class="re0">$text</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span> colo<span class="br0">&#40;</span> <span class="re0">$text</span><span class="sy0">,</span> <span class="st0">&quot;[36m&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="br0">&#125;</span>
<span class="kw2">function</span> green<span class="br0">&#40;</span> <span class="re0">$text</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span> colorize<span class="br0">&#40;</span> <span class="re0">$text</span><span class="sy0">,</span> <span class="st0">&quot;[32m&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="br0">&#125;</span>
<span class="kw2">function</span> brown<span class="br0">&#40;</span> <span class="re0">$text</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span> colorize<span class="br0">&#40;</span> <span class="re0">$text</span><span class="sy0">,</span> <span class="st0">&quot;[33m&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="br0">&#125;</span>
&nbsp;
red<span class="br0">&#40;</span> <span class="st0">&quot;salut&quot;</span> <span class="br0">&#41;</span><span class="sy0">;</span>
blue<span class="br0">&#40;</span> <span class="st0">&quot;je suis bleu&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.miximum.fr/inclassable/133-texte-en-couleur-dans-les-scripts-php/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Trier un tableau de nombres avec Javascript</title>
		<link>http://www.miximum.fr/methodes-et-outils/68-trier-un-tableau-de-nombres-avec-javascript</link>
		<comments>http://www.miximum.fr/methodes-et-outils/68-trier-un-tableau-de-nombres-avec-javascript#comments</comments>
		<pubDate>Tue, 17 Jun 2008 09:04:05 +0000</pubDate>
		<dc:creator>thibault</dc:creator>
				<category><![CDATA[Méthodes et outils]]></category>
		<category><![CDATA[astuce]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[snippet]]></category>

		<guid isPermaLink="false">http://www.miximum.fr/?p=68</guid>
		<description><![CDATA[J&#8217;adore javascript. Je l&#8217;avoue. Malgr&#233; sa syntaxe parfois compl&#232;tement tordue, malgr&#233; son m&#233;pris total pour le principe de moindre suprise, malgr&#233; son niveau &#233;lev&#233; sur l&#8217;&#233;chelle du WTF, ce langage a un petit quelque chose qui me pla&#238;t bien. C&#8217;est comme pour les personnes, on a les atomes crochus, ou on ne les a pas. [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;adore javascript. Je l&#8217;avoue. Malgr&eacute; sa syntaxe parfois compl&egrave;tement tordue, malgr&eacute; son m&eacute;pris total pour <a href="http://fr.wikipedia.org/wiki/Principe_de_moindre_surprise">le principe de moindre suprise</a>, malgr&eacute; son <a href="http://www.flickr.com/photos/smitty/2245445147/">niveau &eacute;lev&eacute; sur l&#8217;&eacute;chelle du WTF</a>, ce langage a un petit quelque chose qui me pla&icirc;t bien. C&#8217;est comme pour les personnes, on a les atomes crochus, ou on ne les a pas.</p>
<p>D&#8217;ailleurs, dans le genre de surprise qu&#8217;on peut avoir en codant, j&#8217;ai &eacute;t&eacute; joliment &eacute;tonn&eacute; en voulant <strong>trier un tableau de nombres</strong>.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="kw2">var</span> nombres <span class="sy0">=</span> <span class="kw2">new</span> Array<span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">2</span><span class="sy0">,</span> <span class="nu0">5</span><span class="sy0">,</span> <span class="nu0">8</span><span class="sy0">,</span> <span class="nu0">9</span><span class="sy0">,</span> <span class="nu0">12</span><span class="sy0">,</span> <span class="nu0">16</span><span class="br0">&#41;</span><span class="sy0">;</span>
nombres.<span class="me1">sort</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">alert</span><span class="br0">&#40;</span>nombres<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">// Et on obtient :</span>
<span class="co1">// 1, 12, 16, 2, 5, 8, 9</span></pre></div></div>

<p>G&eacute;nial<span class="fine">&nbsp;</span>! La fonction sort de l&#8217;objet Array tri les &eacute;l&eacute;ments par <a href="http://fr.wikipedia.org/wiki/Ordre_lexicographique">ordre lexicographique</a> (&agrave; ne pas confondre avec l&#8217;<a href="http://fr.wikipedia.org/wiki/Ordre_alphab%C3%A9tique">ordre alphab&eacute;tique</a>)<span class="fine">&nbsp;</span>!</p>
<p>Bon, et comment je fais, moi, pour trier mon tableau de nombre par ordre croissant<span class="fine">&nbsp;</span>? Allez, je suis sympa, je vous donne la solution&nbsp;:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="kw2">function</span> compare<span class="br0">&#40;</span>x<span class="sy0">,</span> y<span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="kw1">return</span> x <span class="sy0">-</span> y<span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw2">var</span> nombres <span class="sy0">=</span> <span class="kw2">new</span> Array<span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">2</span><span class="sy0">,</span> <span class="nu0">5</span><span class="sy0">,</span> <span class="nu0">8</span><span class="sy0">,</span> <span class="nu0">9</span><span class="sy0">,</span> <span class="nu0">12</span><span class="sy0">,</span> <span class="nu0">16</span><span class="br0">&#41;</span><span class="sy0">;</span>
nombres.<span class="me1">sort</span><span class="br0">&#40;</span>compare<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw3">alert</span><span class="br0">&#40;</span>nombres<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">// Et on obtient bien :</span>
<span class="co1">// 1, 2, 5, 8, 9, 12, 16</span>
&nbsp;
<span class="co1">// Pour trier par ordre décroissant, on definira autrement la fonction compare :</span>
&nbsp;
<span class="kw2">function</span> compare<span class="br0">&#40;</span>x<span class="sy0">,</span> y<span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="kw1">return</span> y <span class="sy0">-</span> x<span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div>

<p>Tellement simple. Tellement tordu. Tellement inattendu. J&#8217;adore. Je dois &ecirc;tre un peu sado-maso sur les bords.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miximum.fr/methodes-et-outils/68-trier-un-tableau-de-nombres-avec-javascript/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Symfony, formulaires, validation, redirection et messages d&#8217;erreur</title>
		<link>http://www.miximum.fr/methodes-et-outils/65-symfony-formulaires-validation-redirection-et-messages-derreur</link>
		<comments>http://www.miximum.fr/methodes-et-outils/65-symfony-formulaires-validation-redirection-et-messages-derreur#comments</comments>
		<pubDate>Fri, 06 Jun 2008 15:25:02 +0000</pubDate>
		<dc:creator>thibault</dc:creator>
				<category><![CDATA[Méthodes et outils]]></category>
		<category><![CDATA[astuce]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.miximum.fr/?p=65</guid>
		<description><![CDATA[Les redirections dans Symfony font s&#8217;arracher les cheveux aux d&#233;veloppeurs Mon probl&#232;me est le suivant&#160;: j&#8217;ai un formulaire classique, et je veux qu&#8217;il affiche les messages qui vont bien en cas d&#8217;erreurs de validation. Jusque l&#224;, rien de tr&#233;s difficile, n&#8217;est-ce pas&#160;? Le probl&#232;me, c&#8217;est qu&#8217;apr&#232;s validation du formulaire, j&#8217;ai une redirection qui me fait [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://prendreuncafe.com/blog/post/2008/01/12/Symfony-une-redirection-302-et-une-exception-sont-dans-un-bateau">Les redirections dans Symfony font s&#8217;arracher les cheveux aux d&eacute;veloppeurs</a> <img src='http://www.miximum.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Mon probl&egrave;me est le suivant&nbsp;: j&#8217;ai un formulaire classique, et je veux qu&#8217;il affiche les messages qui vont bien en cas d&#8217;erreurs de validation. Jusque l&agrave;, rien de tr&eacute;s difficile, n&#8217;est-ce pas<span class="fine">&nbsp;</span>? Le probl&egrave;me, c&#8217;est qu&#8217;apr&egrave;s validation du formulaire, j&#8217;ai une redirection qui me fait perdre les messages d&#8217;erreur.</p>
<p>La <a href="http://www.symfony-project.org/blog/2008/05/07/symfony-1-1-0-rc1-is-out">version 1.1 de Symfony</a>, actuellement en version release candidate, propose un <a href="http://www.aide-de-camp.org/article/3/fr/les-formulaires-symfony-1-1-et-le-pattern-mvc">framework complet de gestion de formulaire</a>. Par cons&eacute;quent, l&#8217;astuce que je vous propose aujourd&#8217;hui ne sera peut-&ecirc;tre pas valable, ni m&ecirc;me utile, pour cette version (c&#8217;est &agrave; v&eacute;rifier). Je suppose donc que vous utilisez la version stable 1.0.x.</p>
<p>Pour mieux comprendre, voici le fonctionnement de mon appli.</p>
<p>Quand j&#8217;affiche ma page, on a ce d&eacute;roulement&nbsp;:</p>
<ol>
<li>Je me connecte sur l&#8217;URL http://example.com/page/show?id=10</li>
<li>Le controleur appele l&#8217;action <strong>executeShow</strong> du module <strong>page</strong></li>
<li>Le template utilis&eacute; pour l&#8217;affichage est <strong>showSuccess.php</strong> du module <strong>page</strong></li>
<li>Mon template utilise l&#8217;instruction include_partial pour inclure le template qui affiche les commentaires sur ma page</li>
<li>Ce template affiche &eacute;galement un formulaire qui permet d&#8217;ajouter un commentaire</li>
</ol>
<p>Quand j&#8217;ajoute un commentaire et valide mon formulaire, on a le d&eacute;roulement suivant&nbsp;:</p>
<ol>
<li>Mon formulaire est valid&eacute;, supposons qu&#8217;il g&eacute;n&egrave;re des erreurs</li>
<li>Le contr&ocirc;leur appelle la fonction <strong>handleErrorAdd</strong> du module <strong>commentaire</strong></li>
<li>Comme on veut r&eacute;afficher le formulaire, on redirige vers la page d&#8217;origine (http://example.com/page/show?id=10)&nbsp;:<br />
        $this->redirect(&#8216;page/show?id=10&#8242;)<span class="fine">&nbsp;</span>;</li>
<li>On red&eacute;roule l&#8217;affichage depuis le d&eacute;but, dans le module <strong>page</strong>. Probl&egrave;me&nbsp;: mon formulaire n&#8217;affiche rien&nbsp;:<br />
        la redirection a perdu les messages d&#8217;erreur.</li>
</ol>
<p>Avec la m&eacute;thode normale, on aurait ceci&nbsp;:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;">// app/frontend/modules/pages/template/showSuccess.php
...
// Affiche des trucs
...
&nbsp;
// Affichage du formulaire
<span class="kw2">&lt;?php</span> <span class="kw1">echo</span> form_tag<span class="br0">&#40;</span><span class="st_h">'@action'</span><span class="br0">&#41;</span> <span class="sy1">?&gt;</span>
&nbsp;
    <span class="kw2">&lt;?php</span> <span class="co1">// Affiche le message d'erreur de validation ?&gt;</span>
    <span class="kw2">&lt;?php</span> <span class="kw1">echo</span> form_error<span class="br0">&#40;</span><span class="st_h">'champ1'</span><span class="br0">&#41;</span> <span class="sy1">?&gt;</span>
    <span class="sy0">&lt;</span>label <span class="kw1">for</span><span class="sy0">=</span><span class="st0">&quot;champ1&quot;</span><span class="sy0">&gt;</span>Champ <span class="nu0">1</span> <span class="sy0">:&lt;/</span>label<span class="sy0">&gt;</span>
    <span class="kw2">&lt;?php</span> <span class="kw1">echo</span> input_tag<span class="br0">&#40;</span><span class="st_h">'champ1'</span><span class="sy0">,</span> <span class="re0">$sf_params</span><span class="sy0">-&gt;</span><span class="me1">get</span><span class="br0">&#40;</span><span class="st_h">'champ1'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy1">?&gt;</span>
&nbsp;
    <span class="kw2">&lt;?php</span> <span class="kw1">echo</span> form_error<span class="br0">&#40;</span><span class="st_h">'champ2'</span><span class="br0">&#41;</span> <span class="sy1">?&gt;</span>
    <span class="sy0">&lt;</span>label <span class="kw1">for</span><span class="sy0">=</span><span class="st0">&quot;champ2&quot;</span><span class="sy0">&gt;</span>Champ <span class="nu0">2</span> <span class="sy0">:&lt;/</span>label<span class="sy0">&gt;</span>
    <span class="kw2">&lt;?php</span> <span class="kw1">echo</span> input_tag<span class="br0">&#40;</span><span class="st_h">'champ2'</span><span class="sy0">,</span> <span class="re0">$sf_params</span><span class="sy0">-&gt;</span><span class="me1">get</span><span class="br0">&#40;</span><span class="st_h">'champ2'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy1">?&gt;</span>
&nbsp;
    <span class="kw2">&lt;?php</span> <span class="kw1">echo</span> submit_tag<span class="br0">&#40;</span><span class="st_h">'Valider'</span><span class="br0">&#41;</span> <span class="sy1">?&gt;</span>
&nbsp;
&lt;/form&gt;</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="co1">// app/frontend/modules/pages/actions/actions.class.php</span>
&nbsp;
<span class="kw2">function</span> executeAdd<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="co1">// Valide le formulaire</span>
    <span class="co1">// ...</span>
    <span class="kw1">return</span> sfView<span class="sy0">::</span><span class="me2">SUCCESS</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw2">public</span> <span class="kw2">function</span> handleErrorAdd<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="co1">// En cas d'erreur, affiche le formulaire avec les messages d'erreurs</span>
    <span class="kw1">return</span> sfView<span class="sy0">::</span><span class="me2">SUCCESS</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div>

<p>Pour parvenir &agrave; ce fonctionnement en cas de redirections, nous allons utiliser <a href="http://www.symfony-project.org/book/1_0/06-Inside-the-Controller-Layer#Flash%20Attributes">les attributs flash</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="co1">// app/frontend/modules/page/actions/actions.class.php</span>
<span class="kw2">function</span> executeShow<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="co1">// récupère les erreurs en cas de redirection</span>
    <span class="co1">// Lors d'un affichage normal, on ne récupère rien</span>
    <span class="re0">$errors</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getFlash</span><span class="br0">&#40;</span><span class="st_h">'errors'</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><a href="http://www.php.net/empty"><span class="kw3">empty</span></a><span class="br0">&#40;</span><span class="re0">$errors</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
        <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">setErrors</span><span class="br0">&#40;</span><span class="re0">$errors</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
    <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">xxx</span> <span class="sy0">=</span> <span class="sy0">...</span>
    <span class="co1">// Fonctionnement classique</span>
<span class="br0">&#125;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;">// app/frontend/modules/page/templates/showSuccess.php
&nbsp;
// ...
// Affiche la page
&nbsp;
// Affiche les commentaires
<span class="kw2">&lt;?php</span> include_partial<span class="br0">&#40;</span><span class="st_h">'commentaire/list'</span><span class="sy0">,</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="sy0">...</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy1">?&gt;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;">// app/frontend/modules/commentaire/templates/_list.php
&nbsp;
// Affiche les commentaires sur la page
// ...
&nbsp;
// Affichage du formulaire
// Notez la cible du formulaire
<span class="kw2">&lt;?php</span> <span class="kw1">echo</span> form_tag<span class="br0">&#40;</span><span class="st_h">'commentaire/add'</span><span class="br0">&#41;</span> <span class="sy1">?&gt;</span>
&nbsp;
    // Affiche le message d'erreur de validation
    <span class="kw2">&lt;?php</span> <span class="kw1">echo</span> form_error<span class="br0">&#40;</span><span class="st_h">'champ1'</span><span class="br0">&#41;</span> <span class="sy1">?&gt;</span>
    &lt;label for=&quot;champ1&quot;&gt;Champ 1 :&lt;/label&gt;
    <span class="kw2">&lt;?php</span> <span class="kw1">echo</span> input_tag<span class="br0">&#40;</span><span class="st_h">'champ1'</span><span class="sy0">,</span> <span class="re0">$sf_params</span><span class="sy0">-&gt;</span><span class="me1">get</span><span class="br0">&#40;</span><span class="st_h">'champ1'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy1">?&gt;</span>
&nbsp;
    <span class="kw2">&lt;?php</span> <span class="kw1">echo</span> form_error<span class="br0">&#40;</span><span class="st_h">'champ2'</span><span class="br0">&#41;</span> <span class="sy1">?&gt;</span>
    &lt;label for=&quot;champ2&quot;&gt;Champ 2 :&lt;/label&gt;
    <span class="kw2">&lt;?php</span> <span class="kw1">echo</span> input_tag<span class="br0">&#40;</span><span class="st_h">'champ2'</span><span class="sy0">,</span> <span class="re0">$sf_params</span><span class="sy0">-&gt;</span><span class="me1">get</span><span class="br0">&#40;</span><span class="st_h">'champ2'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy1">?&gt;</span>
&nbsp;
    <span class="kw2">&lt;?php</span> <span class="kw1">echo</span> submit_tag<span class="br0">&#40;</span><span class="st_h">'Valider'</span><span class="br0">&#41;</span> <span class="sy1">?&gt;</span>
&nbsp;
&lt;/form&gt;</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="co1">// app/frontend/modules/commentaire/actions/actions.class.php</span>
&nbsp;
<span class="co1">// La validation s'est bien passée</span>
<span class="kw2">public</span> <span class="kw2">function</span> executeAdd<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="co1">// Créé le commentaire</span>
    <span class="co1">// ...</span>
    <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">comment</span><span class="sy0">-&gt;</span><span class="me1">save</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
    <span class="co1">// et REDIRIGE vers l'affichage de la page</span>
    <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">redirect</span><span class="br0">&#40;</span><span class="st_h">'/page/show/?id='</span><span class="sy0">.</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getRequestParameter</span><span class="br0">&#40;</span><span class="st_h">'id'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="co1">// Gère les erreur de validation</span>
<span class="kw2">public</span> <span class="kw2">function</span> handleErrorAdd<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
    <span class="co1">// Toute l'astuce est ici :</span>
    <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">setFlash</span><span class="br0">&#40;</span><span class="st_h">'errors'</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getErrors</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">redirect</span><span class="br0">&#40;</span><span class="st_h">'/page/show?id='</span><span class="sy0">.</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">getRequestParameter</span><span class="br0">&#40;</span><span class="st_h">'id'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="kw1">return</span> sfView<span class="sy0">::</span><span class="me2">SUCCESS</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div>

<p>Et voil&agrave;. Maintenant, vous devriez voir les messages d&#8217;erreur de validation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miximum.fr/methodes-et-outils/65-symfony-formulaires-validation-redirection-et-messages-derreur/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>eZ Publish et les caches, une grande histoire d&#8217;amour ?</title>
		<link>http://www.miximum.fr/inclassable/52-ez-publish-et-les-caches-une-grande-histoire-damour</link>
		<comments>http://www.miximum.fr/inclassable/52-ez-publish-et-les-caches-une-grande-histoire-damour#comments</comments>
		<pubDate>Wed, 28 May 2008 13:02:19 +0000</pubDate>
		<dc:creator>thibault</dc:creator>
				<category><![CDATA[Inclassable]]></category>
		<category><![CDATA[eZ Publish]]></category>
		<category><![CDATA[snippet]]></category>

		<guid isPermaLink="false">http://www.miximum.fr/?p=52</guid>
		<description><![CDATA[&#171;&#160;&#160;Vide les caches&#160;!&#160;&#160;&#187;, c&#8217;est le premier truc qu&#8217;on entends ici quand quelque chose ne va pas. L&#8217;usage intensif des caches par eZ Publish est bien connu. Mais je viens seulement de r&#233;aliser &#224; quel point les caches et le CMS entretiennent une relation fusionnelle. Je savais qu&#8217;eZ Publish utilisait des caches de contenu, de templates [...]]]></description>
			<content:encoded><![CDATA[<p>&laquo;&nbsp;&nbsp;Vide les caches<span class="fine">&nbsp;</span>!&nbsp;&nbsp;&raquo;, c&#8217;est le premier truc qu&#8217;on entends ici quand quelque chose ne va pas. <a href="http://pwet.fr/blog/ez_publish_et_son_cache">L&#8217;usage intensif des caches par eZ Publish</a> est bien connu. Mais je viens seulement de r&eacute;aliser &agrave; quel point les caches et le CMS entretiennent une relation fusionnelle.</p>
<p>Je savais qu&#8217;eZ Publish utilisait des caches de contenu, de templates et de configuration. Normal. J&#8217;ai d&eacute;couvert lundi qu&#8217;il (ou elle, d&#8217;ailleurs ?) <a href="http://www.miximum.fr/musee-des-horreurs/48-mon-attributefilter-deconne-pourquoi">utilisait aussi des caches internes</a> qui n&#8217;&eacute;taient pas effac&eacute;s par le processus habituel.</p>
<p>Aujourd&#8217;hui, je viens de d&eacute;couvrir qu&#8217;eZ Publish utilisait des caches en m&eacute;moire vive durant l&#8217;ex&eacute;cution d&#8217;extensions PHP. Note&nbsp;: pour les gros scripts, penser &agrave; r&eacute;guli&egrave;rement vider les caches en appelant la fonction eZContentObject::clearCache(), sinon, &ccedil;a sera un beau heap overflow.</p>
<p>En bonus, une petite fonction que vous pouvez appeler dans une grosse boucle, pour vider les caches &agrave; intervalles r&eacute;guliers&nbsp;:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="kw2">function</span> clearCache<span class="br0">&#40;</span><span class="re0">$maxIterations</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span>
    static <span class="re0">$iteration</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
&nbsp;
    <span class="re0">$iteration</span><span class="sy0">++;</span>
&nbsp;
    <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$iteration</span> <span class="sy0">&gt;=</span> <span class="re0">$maxIterations</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
        <a href="http://www.php.net/printf"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;nettoyage du cache<span class="es1">\n</span>&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        eZContentObject<span class="sy0">::</span><span class="me2">clearCache</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="re0">$iteration</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div>

<p>Combien d&#8217;autres caches que je n&#8217;ai pas encore d&eacute;couvert<span class="fine">&nbsp;</span>?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miximum.fr/inclassable/52-ez-publish-et-les-caches-une-grande-histoire-damour/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Récupérer des objets de contenu en filtrant par attribut avec l&#8217;API eZ Publish</title>
		<link>http://www.miximum.fr/methodes-et-outils/47-recuperer-des-objets-de-contenu-en-filtrant-par-attribut-avec-lapi-ez-publish</link>
		<comments>http://www.miximum.fr/methodes-et-outils/47-recuperer-des-objets-de-contenu-en-filtrant-par-attribut-avec-lapi-ez-publish#comments</comments>
		<pubDate>Mon, 26 May 2008 15:11:02 +0000</pubDate>
		<dc:creator>thibault</dc:creator>
				<category><![CDATA[Méthodes et outils]]></category>
		<category><![CDATA[eZ Publish]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[snippet]]></category>

		<guid isPermaLink="false">http://www.miximum.fr/methodes-et-outils/47-recuperer-des-objets-de-contenu-en-filtrant-par-attribut-avec-lapi-ez-publish</guid>
		<description><![CDATA[Mon besoin est simple&#160;: je veux r&#233;cup&#233;rer en PHP, avec l&#8217;API eZ Publish, toutes les instances d&#8217;une certaine classe, en effectuant un filtre sur la valeur d&#8217;un attribut (dans mon cas bien pr&#233;cis&#160;: c&#8217;est une checkbox qui doit &#234;tre coch&#233;e). Voici le snippet qui permet de faire &#231;a&#160;: $nodes = array&#40;&#41;; $nodes =&#38; eZContentObjectTreeNode::subTree&#40; array&#40; [...]]]></description>
			<content:encoded><![CDATA[<p>Mon besoin est simple&nbsp;: je veux r&eacute;cup&eacute;rer en PHP, avec l&#8217;<a href="http://pubsvn.ez.no/">API eZ Publish</a>, toutes les instances d&#8217;une certaine classe, en effectuant un filtre sur la valeur d&#8217;un attribut (dans mon cas bien pr&eacute;cis&nbsp;: c&#8217;est une checkbox qui doit &ecirc;tre coch&eacute;e).</p>
<p>Voici le snippet qui permet de faire &ccedil;a&nbsp;:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;color: #ccc; font: 12px Consolas, Lucida Console, Monaco, monospace;"><span class="re0">$nodes</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$nodes</span> <span class="sy0">=&amp;</span> eZContentObjectTreeNode<span class="sy0">::</span><span class="me2">subTree</span><span class="br0">&#40;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span>
                <span class="st_h">'IgnoreVisibility'</span> <span class="sy0">=&gt;</span> <span class="kw4">false</span><span class="sy0">,</span>
                <span class="co1">// 'Limit' =&gt; 10, // Je peux rajouter une limite max</span>
                <span class="st_h">'ClassFilterType'</span> <span class="sy0">=&gt;</span> <span class="st_h">'include'</span><span class="sy0">,</span>  <span class="co1">// Je ne veux que les objets de type classe</span>
                <span class="st_h">'ClassFilterArray'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span> <span class="st_h">'classe'</span> <span class="br0">&#41;</span><span class="sy0">,</span>
                <span class="st_h">'AttributeFilter'</span> <span class="sy0">=&gt;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span> <span class="st_h">'classe/attribut'</span><span class="sy0">,</span> <span class="st_h">'='</span><span class="sy0">,</span> <span class="st_h">'1'</span> <span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="co1">// Mon attribut est à 1, ma case est cochée</span>
                <span class="br0">&#41;</span><span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>

<p>Plus d&#8217;infos sur l&#8217;usage de <a href="http://www.frefred.fr/blog/ezcontentobjecttreenode_subtree_d_ez_publish">ezContentObjectTreeNode chez Frefred</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miximum.fr/methodes-et-outils/47-recuperer-des-objets-de-contenu-en-filtrant-par-attribut-avec-lapi-ez-publish/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

