<?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>Amicalement Web - Astuces et Bons plans dans le développement web &#187; Symfony</title>
	<atom:link href="http://www.amicalement-web.net/tag/symfony/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.amicalement-web.net</link>
	<description>Astuces et bons plans d&#039;un web developpeur</description>
	<lastBuildDate>Mon, 08 Mar 2010 10:00:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Symfony, les forms et les forms embarqués</title>
		<link>http://www.amicalement-web.net/symfony-les-forms-et-les-forms-embarques/2010/03/08/</link>
		<comments>http://www.amicalement-web.net/symfony-les-forms-et-les-forms-embarques/2010/03/08/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 10:00:00 +0000</pubDate>
		<dc:creator>Vince</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[conception]]></category>
		<category><![CDATA[embed]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[poo]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=896</guid>
		<description><![CDATA[ Tout d&#8217;abord admirez, dans le titre, cette traduction d&#8217;embedded forms , qui est digne d&#8217;un Nelson (ou d&#8217;un ubermuda) en pleine forme. 
Maintenant que c&#8217;est fait, nous allons parler ici d&#8217;un des aspects de symfony les plus intéressant, mais aussi d&#8217;un des moins bien documenté. Pas que les forms &#171;&#160;basiques&#160;&#187; ne soient pas documentés, [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/symfony-les-forms-et-les-forms-embarques/2010/03/08/"><img src="http://www.amicalement-web.net/wp-content/uploads/boats.jpg" alt="" title="boats" width="614" height="100" class="alignnone size-full wp-image-1368" /></a> Tout d&#8217;abord admirez, dans le titre, cette traduction d&#8217;<em>embedded forms</em> , qui est digne d&#8217;un Nelson (ou d&#8217;un ubermuda) en pleine forme. </p>
<p>Maintenant que c&#8217;est fait, nous allons parler ici d&#8217;un des aspects de symfony les plus intéressant, mais aussi d&#8217;un des moins bien documenté. Pas que les forms &laquo;&nbsp;basiques&nbsp;&raquo; ne soient pas documentés, mais dès que vous voulez faire autre chose qu&#8217;un form qui représente tel quel (ou presque) un objet de la base de données, ça se complique un peu. </p>
<p>Je vais essayer de vous faire un petit tour d&#8217;horizon de <strong>ce qu&#8217;on peut faire avec les embedded forms</strong>.<br />
<span id="more-896"></span></p>
<h3>Les forms, c&#8217;est de la POO</h3>
<p>Vous allez me dire que tout symfony est de la POO (Programmation Orientée Objet), et vous avez raison. Mais on peut utiliser symfony sans être un expert de la POO (voire sans vraiment savoir ce que c&#8217;est), en suivant Jobeet et en comprenant que executeIndex inclut le template indexSuccess.php en cas de succès. À partir de là, on est le roi du monde. </p>
<p>Enfin, du monde, moins les forms. Car les forms sont &#8211; à mon sens &#8211; la partie de symfony qui est à la fois utilisée par tous les utilisateurs de symfony, et à la fois<strong> très orientée objet </strong>(les factories sont par exemple beaucoup moins utilisées &#8230;). Du coup, ça mérite quelques explications.</p>
<h3>Tout le monde n&#8217;est pas doué en POO</h3>
<p>Certes tout le monde n&#8217;est pas doué en POO, professionnel ou pas d&#8217;ailleurs ;) À l&#8217;inverse de JAVA où les programmeurs n&#8217;ont pas vraiment le choix, la POO est récente dans PHP et certains l&#8217;ont découvert comme un cheveu sur la soupe. </p>
<p>L&#8217;impression que l&#8217;on a quand on essaye de changer le comportement des embed form c&#8217;est : mais <strong>où est-ce que je peux bien faire ce que j&#8217;ai envie de faire</strong>? doBind, doUpdateObject, saveEmbeddedForms, &#8230; les choix sont multiples. </p>
<p>Et pour cause, les forms utilisent énormément l&#8217;héritage, et disposent donc de moultes méthodes que l&#8217;on peut surcharger, sans que ce ne soit vraiment documenté autre part que dans l&#8217;API. Si on ne comprend pas les principes de base de la POO, les forms sont une vraie galère (déjà que quand on les comprend &#8230;). </p>
<p>Petit rappel sur la POO sur <a href="http://hdd34.developpez.com/cours/artpoo/ ">developpez.com</a> : Consultez au moins la partie sur l&#8217;héritage pour ceux qui sont largués.</p>
<h3>Principales étapes de gestion des formulaires</h3>
<p>Il faut quand même que vous ayez quelque chose à l&#8217;esprit, il y a pour moi deux principales étapes quand vous souhaitez traiter un formulaire qui vient d&#8217;être soumis :</p>
<ul>
<li><strong>1 ère étape</strong> : lier les valeurs qui sont récupérées dans la requête à l&#8217;objet Form (c&#8217;est à dire les recopier en s&#8217;assurant qu&#8217;elles sont valides et nettoyées)</li>
<li><strong>2 ème étape</strong> : Une fois les valeurs recopiés dans le $values du formulaire (qui n&#8217;est en fait qu&#8217;un tableau de valeurs nettoyées), réaliser un traitement dessus ou sur l&#8217;objet qui en découlera (nous verrons cela par la suite)</li>
</ul>
<p>
Il est toujours bon de <strong>se demander ce que l&#8217;on veut faire exactement</strong> : agir sur les valeurs qui seront recopiées et validées dans notre form, ou alors agir sur les valeurs nettoyées et recopiées, avant qu&#8217;elles ne soient sauvegardées en base.
</p>
<h4>Première étape</h4>
<p>Lors de la première étape de liaison/validation/recopie des valeurs de la requête dans votre formulaire (votre objet Form), vous pourrez agir sur les données<strong> avant qu&#8217;elles ne soient passées dans les validateurs</strong>, ou alors une fois qu&#8217;elles sont passées dans les validateurs.</p>
<p>Vous pourrez faire votre bourrin : enlever des parties de votre formulaire de la requête en vous basant sur certaines valeurs soumises.<br />
Par exemple enlever tout un formulaire embarqué, si certaines valeurs ne sont pas saisies (c&#8217;est l&#8217;exemple qu&#8217;on trouve pas mal sur le web d&#8217;ailleurs).<br />
Petit souci : les valeurs de la requête n&#8217;auront pas été validées/nettoyées par les validateurs, vous vous exposez donc à quelques soucis (dans le style le gars qui n&#8217;aura rempli que des espaces dans un champ texte, faudra penser à faire vous même le trim avant de vérifier la valeur &#8230;).<br />
<h4>Deuxième étape</h4>
<p>
Lors de la deuxième étape, c&#8217;est ici que vous devrez effectuer<strong> les traitements concernant votre logique métier</strong> à proprement parler. La première étape s&#8217;est occupée de vous donner accès aux valeurs dans votre formulaire (via le tableau $values), maintenant que c&#8217;est fait vous pouvez jouer avec.</p>
<p>
Vous voulez mettre à jour un objet qui dépend de celui que vous allez sauvegarder automatiquement, vous souhaitez insérer votre objet dans un nested set, etc etc &#8230; C&#8217;est dans cette étape que vous ferez ça.
</p>
<p>
Je sépare sciemment le processus en deux étapes, après vous pouvez le voir autrement. Les étapes étant chaînées, vous pouvez les mélanger et faire un peu de business logic à la fin de l&#8217;étape 1 par exemple, mais essayez de rester constant partout dans votre code, où vous ne saurez plus où aller voir quand il y a un souci.
</p>
<h3>Étude de cas</h3>
<p>On va prendre ici un cas tout simple, celui d&#8217;un formulaire auto-généré par doctrine à partir d&#8217;une table de votre modèle. </p>
<p>Appelons notre modèle PetitSuisse. On aura donc une classe nommée <code>PetitSuisseForm.class.php dans lib/form/doctrine/</code></p>
<p>On va vite fait faire le parcours d&#8217;héritage de cette classe :<br />
<strong>PetitSuisseForm => BasePetitSuisseForm => BaseFormDoctrine => sfFormDoctrine => sfFormObject => BaseForm => sfFormSymfony => sfForm (ouf)</strong>
</p>
<p>
Même si quelques unes de ces classes sont vides, on comprend que ça puisse devenir un peu dur de savoir où chercher. Alors oui <strong>l&#8217;abstraction c&#8217;est bon</strong> mangez en, mais ça engendre une complexité de lecture du code non négligeable.</p>
<p>Les classes qui sont &laquo;&nbsp;à vous&nbsp;&raquo; et donc dans lesquelles vous pourrez surcharger des méthodes sont <strong>PetitSuisseForm</strong> et <strong>BaseFormDoctrine</strong>.</p>
<p> La première vous permettra de surcharger une méthode relative au formulaire du modèle PetitSuisse, la deuxième vous permettra de surcharger de manière plus globale (chacun des forms auto-générés par doctrine héritant de BaseFormDoctrine). Je parle ici de symfony 1.3+, vous n&#8217;aurez pas toutes ces classes dans les versions précédentes.</p>
<p>On va maintenant parler <strong>des principales méthodes</strong> que vous aurez (peut être) à surcharger. Il en existe d&#8217;autres, si celles ci ne vous vont pas, lisez le code de symfony ;-)
</p>
<h3>1 ère étape (liaison)</h3>
<h4>doBind(array $values)</h4>
<p>
C&#8217;est la méthode qui va faire appel aux validateurs pour <strong>nettoyer les valeurs</strong> de la requête avant de les placer dans le tableau des valeurs. Ce sont ensuite sur ces valeurs nettoyées que nous travaillerons. Vous pouvez ici toucher aux données brut de pomme <strong>qui sortent directement du formulaire envoyé</strong>, sans traitement préalable.
</p>
<h3>2 ème étape (sauvegarde)</h3>
<h4>doSave($con = null)</h4>
<p>
C&#8217;est cette méthode qui sera appelée (par save() ) lorsque vous demandez la sauvegarde de votre formulaire. Elle se charge de mettre à jour votre objet avec les valeurs du form en appelant updateObject (qui appelera doUpdateObject que nous verrons par la suite).<br />
Si vous souhaitez <strong>changer le processus de sauvegarde</strong>, ajouter par exemple l&#8217;appel d&#8217;une vos méthodes à chaque sauvegarde du formulaire (pourquoi pas garder trace dans un fichier de toutes les sauvegardes de vos formulaires), c&#8217;est ici que vous devez le faire.
</p>
<h4>processValues($values)</h4>
<p>
C&#8217;est ici que vous pouvez<strong> toucher les valeurs qui ont été nettoyées </strong>par les validateurs, avant qu&#8217;elles ne soient passées à la méthode updateObject (que nous verrons par la suite). Je n&#8217;ai pas de traitement particulier en tête, mais l&#8217;idée est là : modifier des valeurs avant qu&#8217;elles ne soient utilisées pour mettre votre objet à jour.
</p>
<h4>doUpdateObject($values)</h4>
<p>
C&#8217;est cette méthode que vous devrez surcharger si vous voulez réaliser <strong>une opération spéciale sur votre objet avant qu&#8217;il ne soit enregistré</strong> dans la base.<br />
Par exemple, si vous voulez insérer cet objet à la fin d&#8217;un NestedSet, vous ferez ça ici. Le $values passé en paramètre est un tableau contenant les valeurs du formulaire, une fois qu&#8217;elles ont été nettoyées/vérifiées par les validateurs.
</p>
<h4>updateObjectEmbeddedForm($values)</h4>
<p>
Je pense qu&#8217;elle veut bien dire ce qu&#8217;elle veut dire. Elle va se charger d&#8217;appeler la fonction updateObject de chaque formulaire embarqué. Vous voulez agir sur le traitement des données par vos forms embarqués ? C&#8217;est par ici !
</p>
<h4>saveEmbeddedForms($con = null, $forms = null)</h4>
<p>
Allez la petite dernière pour la route : elle se charge de la sauvegarde de chacun des objets de vos forms embarqués. Fabien Potencier en donne un exemple de surcharge dans le livre <a  href="http://www.symfony-project.org/more-with-symfony/1_4/en/06-Advanced-Forms#chapter_06_sub_creating_a_custom_validator">&laquo;&nbsp;More with symfony&nbsp;&raquo;</a>
</p>
<h3>Exemple d&#8217;utilisation</h3>
<p>C&#8217;est bien beau de parler, mais un peu de concret ne fait pas de mal. </p>
<p>Vous trouverez un bon exemple pour comprendre le comportement des forms sur le blog de n1k0 dans son article <a  href="http://prendreuncafe.com/blog/post/2009/11/29/Embedding-Relations-in-Forms-with-Symfony-1.3-and-Doctrine">Embedding Relations in Forms with Symfony 1.3 and Doctrine</a>. Certes c&#8217;est en anglais, mais le code est universel ! Si vous avez des bons articles en français je suis preneur aussi. </p>
<p>Il existe maintenant la méthode embedRelation() et le plugin de Daniel Lohse <a  href="http://github.com/annismckenzie/ahDoctrineEasyEmbeddedRelationsPlugin">ahDoctrineEasyEmbeddedRelationsPlugin</a> qui font ça tout seul. Mais c&#8217;est toujours bien de comprendre ce que l&#8217;on fait ;-)</p>
<h3>Conclusion</h3>
<p>Je vous ai fait un petit tour d&#8217;horizon des principales méthodes que vous pouvez surcharger dans votre formulaire. Comme je l&#8217;ai dit plus haut, ce n&#8217;est pas une liste exhaustive, mais vous devriez avoir de quoi vous amuser. </p>
<p>J&#8217;ai juste essayé de voir tout cela d&#8217;une manière un peu plus globale et de ne pas proposer un n-ième exemple de code pour les formulaires embarqués. </p>
<p>Mais avec tout cet attirail, gardez à l&#8217;esprit que votre code d&#8217;action ne doit pas dépasser le classique <code>Bind &gt; Save</code>! Ce qui est au traitement de votre formulaire, reste dans votre formulaire! Enjoy!</p>
<p><small>Crédit photo: http://www.flickr.com/photos/fromeyetopixel/2470999873/</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/symfony-les-forms-et-les-forms-embarques/2010/03/08/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Symfony Live 2010 : Les coulisses</title>
		<link>http://www.amicalement-web.net/symfony-live-2010-les-coulisses/2010/02/24/</link>
		<comments>http://www.amicalement-web.net/symfony-live-2010-les-coulisses/2010/02/24/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 10:00:38 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[cafe]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[paris]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[wifi]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1225</guid>
		<description><![CDATA[ Pour les retardataires, la semaine dernière se tenait le Symfony Live 2010 à Paris, auquel, Vince et moi avons assisté pendant 2 jours. Malheureusement, ce genre d&#8217;évènement n&#8217;est pas toujours à la portée de tous.
Après, vous avoir résumé à notre façon, les 2 jours, il nous semblait pertinent de vous faire un petit topo [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/symfony-live-2010-les-coulisses/2010/02/24/"><img class="alignnone size-full wp-image-1338" title="elephant-php" src="http://www.amicalement-web.net/wp-content/uploads/elephant-php.jpg" alt="" width="614" height="100" /></a> Pour les retardataires, la semaine dernière se tenait le Symfony Live 2010 à Paris, auquel, <a  href="http://twitter.com/vjousse">Vince</a> et moi <a  href="/symfony-live-2010-1ere-journee/2010/02/17/">avons assisté</a> pendant <a  href="/symfony-live-2010-2eme-journee/2010/02/19/">2 jours</a>. Malheureusement, ce genre d&#8217;évènement n&#8217;est pas toujours à la portée de tous.</p>
<p>Après, vous avoir résumé à notre façon, les 2 jours, il nous semblait pertinent de vous faire un petit topo des coulisses, histoire de vous mettre encore plus dans l&#8217;ambiance et vous donner envie (ou pas) de nous y retrouver la prochaine fois!<br />
<span id="more-1225"></span></p>
<h3>L&#8217;endroit</h3>
<p>La conférence, était à Paris, <strong>à la Cité Internationale</strong> (côté porte d&#8217;Orléans donc), facilement accessible en transport en commun &#8211; métro, tram et rer pas loin &#8211; comme la précédente session en 2009. Seule différence, la salle.</p>
<p>À l&#8217;arrivée le premier jour, vous montrez patte blanche et on vous remet votre badge, votre joli tour de cou et un petit sac de pub, stickers, tshirt et autre tournevis (sisi, un tournevis yahoo :p). Il ne reste plus qu&#8217;à pousser la porte de l&#8217;arène. Juste derrière, on retrouve les stands des livres de Sensio, des éléphants PHP en peluche et autre goodies.</p>
<p>Pour le coup, on était à l&#8217;espace Adenauer (pour ceux qui connaissent l&#8217;endroit). Donc une grande salle avec gradin entouré d&#8217;un U, avec tables, chaises et quelques prises électriques. Prises qui ont du coup chauffées énormément, et ce fut un peu <strong>la guerre pour recharger son notebook</strong> chéri &#8211; heureusement que la majorité était des macs avec des autonomies digne de ce nom, mais je m&#8217;égare.</p>
<p>Du coup, il était possible d&#8217;aller se détendre sur les côtés si une conférence ne vous emballait pas, ou si vous aviez une urgence à traiter, un billet de blog à écrire et j&#8217;en passe. C&#8217;est toujours sympa. Bon du coup, les conférences avec peu de succès étaient en direct concurrence avec le bruit environnant, mais rien de dramatique.</p>
<h3>Le ravitaillement</h3>
<p>Mais le principal, derrière l&#8217;écran de projection, le ravitaillement ! Mini croissants, pains au chocolat, truc aux raisins pas bon, jus d&#8217;orange, café, thé,<strong> le tout à volonté</strong> :p Bon forcément,<strong> le café ne fait pas long feu</strong>, donc mieux vaut ne pas arriver trop tard.<br />
C&#8217;est d&#8217;ailleurs le point qui aura marqué beaucoup de monde à voir les tweets passer sur le sujet. Moralité, les geeks boivent du café, étonnant non ?</p>
<p>A midi, branle-bas de combat: Les lunchs bags arrivent ! En général, vous pouvez aller vous détendre 10min, en laissant la première vague se battre pour les premiers, de toute façon, il y en toujours plus que pas assez :p On se demande quand même, comment Fabien faisait pour être le premier servi, mais on va dire qu&#8217;on a rien vu ;)</p>
<p>Donc le minimum syndical, pour le repas &#8211; offert donc, enfin offert, compris dans le prix dirons nous ;) -, <strong>un sandwich &#8211; au choix parmi 4 ou 5 différent tout de même -</strong>, du saumon, au jambon, en passant par les classiques poulet, fromage, accompagné d&#8217;une bouteille d&#8217;eau et d&#8217;une part de tarte.<br />
A noter, que la tarte aux poires de Mercredi m&#8217;aura beaucoup plus emballé que celle aux pommes de Mardi, mais question de goût :p</p>
<h3>Le confort</h3>
<p>En tant que geek, en temps normal, on n&#8217;est pas difficile, pourvu qu&#8217;on puisse <strong>se connecter en wifi</strong>. C&#8217;était le cas, et après une petite frayeur en arrivant Mardi, il s&#8217;est avéré qu&#8217;il a plus ou moins tenu le coup ensuite.</p>
<p>Pour s&#8217;asseoir, on avait le choix des chaises devant l&#8217;estrade ou les fauteuils des gradins, genre petit cinéma de quartier. Malheureusement, même si on trouve ça sympa au début, la mousse des sièges datant certainement, elle fini par se tasser &#8211; en y restant plus de 3h d&#8217;affilée, forcément &#8211; et donnait l&#8217;impression d&#8217;être <strong>assis sur une planche de bois</strong>.</p>
<p>Certes on venait pas pour le confort, mais rajouté à l&#8217;<strong>espace assez étriqué pour chaque fauteuil</strong>, c&#8217;était pas le luxe non plus :p<br />
Heureusement la conférence a tenu ses promesses, ce qui nous permettait de se focaliser sur autre chose &#8211; peut-être était-ce prémédité.</p>
<h3>Les orateurs</h3>
<p>On a eu le droit à une belle brochette d&#8217;orateurs, tous avec des présentations en général <strong>rondement menées</strong> et bien calés sur leur sujet. Évidemment, pas simple pour les pays latins de rivaliser avec les accents américains de John ou Dustin, mais dans l&#8217;ensemble, je pense que tous ont été compris. Alors certes certains puristes ont critiqué l&#8217;accent de <a  href="http://twitter.com/ubermuda">ubermuda</a>, c&#8217;était juste un moyen d&#8217;apporter un peu de French touch à cette conférence ;)</p>
<p>On a pu apprécier, pour beaucoup, <strong>leur capacité à captiver leur auditoire</strong>, entre les slides joke, les effets musicaux ou les petites phrases échappées entre 2 slides, c&#8217;est resté très cool et dans une bonne ambiance.</p>
<p>Pour ce qui est de l&#8217;organisation, <a  href="http://twitter/hhamon">Hugo</a> s&#8217;est occupé du passage de micro et d&#8217;écourter les sessions qui commençaient à dépasser, permettant un planning presque respecté.</p>
<p>Niveau transition, on avait 5min de break entre chaque intervention, pas de quoi aller fumer une clope, et 1 pause de 15min toutes les 2 heures. Un bon rythme, même si ca représente un gros effort de concentration, c&#8217;est toujours plus simple quand on est intéressé par le sujet.</p>
<h3>Rencontres</h3>
<p>Pas simple de ce côté, car énormément de monde et un planning assez serré, pas la possibilité de rester tard dans la soirée. En rajoutant à ça, la volonté de couvrir l&#8217;évènement sur le blog. J&#8217;ai pas été super dispo.</p>
<p>Bon on a réussi à accrocher <a  href="http://twitter.com/ubermuda">ubermuda</a>, toujours mieux que rien :p</p>
<h3>Photos</h3>
<p>Forcément, on a la chance d&#8217;avoir des photographes amateurs dans ce genre de réunion, je vous laisse jeter un oeil <a  href="http://www.flickr.com/photos/tags/sflive2010/">aux photos tagguées sflive2010 sur flickr</a>.</p>
<h3>Conclusion</h3>
<p>Finalement seul détail qui m&#8217;aura marqué, c&#8217;est surtout <strong>le manque de poubelles</strong> ! Il me semble que j&#8217;en ai aperçu 2, dans la zone de ravitaillement, pas forcément très grandes. Ce qui fait &#8211; à tort ou à raison &#8211; que le sol près des sièges a été annexé parfois par les gobelets en plastique. Bon on reste des geeks me direz vous.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/symfony-live-2010-les-coulisses/2010/02/24/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Symfony Live 2010 : 2eme journée</title>
		<link>http://www.amicalement-web.net/symfony-live-2010-2eme-journee/2010/02/19/</link>
		<comments>http://www.amicalement-web.net/symfony-live-2010-2eme-journee/2010/02/19/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 10:00:15 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[optimisation]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[profiling]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1237</guid>
		<description><![CDATA[ Après une première journée, un peu éprouvante &#8211; levé 5h30, couché 2h &#8211; on est reparti au front, avec dans la ligne de mire la preview de Symfony 2. Forcément, ca motive.

Matinée
Okapi
Bon, on avoue, on a un peu zappé cette conférence, histoire de gagner un peu plus de temps de sommeil pour tenir sur [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/symfony-live-2010-2eme-journee/2010/02/19"><img src="http://www.amicalement-web.net/wp-content/uploads/estrade.jpg" alt="" title="estrade" width="614" height="100" class="alignnone size-full wp-image-1312" /></a> Après <a  href="/symfony-live-2010-1ere-journee/2010/02/17/">une première journée</a>, un peu éprouvante &#8211; levé 5h30, couché 2h &#8211; on est reparti au front, avec dans la ligne de mire la preview de Symfony 2. Forcément, ca motive.<br />
<span id="more-1237"></span></p>
<h3>Matinée</h3>
<h4>Okapi</h4>
<p>Bon, on avoue, on a un peu zappé cette conférence, histoire de gagner un peu plus de temps de sommeil pour tenir sur la durée, et en profiter pour mettre au propre le billet d&#8217;hier. On a juste retenu qu&#8217;ils utilisaient le <a  href="http://components.symfony-project.org/dependency-injection/">Dependency Injection Container</a> des components symfony.</p>
<p>Mais vous pouvez <a  href="http://www.slideshare.net/lsmith77/okapi-meet-symfony-symfony-meet-okapi">retrouver les slides</a>.</p>
<h4>Optimisation PHP</h4>
<p>Un tour complet à coup d&#8217;exemple de opcode, intéressant même si au final ce sont toujours les mêmes choses qui sont redites, très génériques. Je me tends à croire qu&#8217;un jour on aura un vrai cas concret dans ce genre d&#8217;intervention.</p>
<p>Et puis surtout, quand on utilise un framework, on a plus à gagner, <strong>à bien utiliser le framework</strong> qu&#8217;à optimiser une boucle. </p>
<p>Mais on a réussi à avoir quelques tips supplémentaires pendant la séance de questions :</p>
<ul>
<li>La pré incrémentation est plus rapide que la post incrémentation</li>
<li>Toujours privilégier la boucle while à une boucle for</li>
<li>Bannir les relations parent/enfant &#8211; L&#8217;enfant pointe sur le parent et inversement. Pas bon pour la mémoire</li>
</ul>
<p><a  href="http://www.slideshare.net/xdecock/php-performance-sflive-2010">Voir les slides</a><br />
Et pour aller plus loin dans le sujet, une <a  href="http://www.slideshare.net/fabianlange/full-stack-web-application-performance-tuning-presentation">ancienne présentation de Fabian Lange</a>.</p>
<h4>Git introduction</h4>
<p>Une des premières sessions Show Time, où Scott Chacon y est allé franco pour présenter Git, à une assistance majoritairement SVN.<br />
Une petite autopromo : rapidité, travail offline (sauf pull et push) et <strong>puissance du système de branches</strong> ont suffit à mettre le doute dans la tête de beaucoup, à ce qu&#8217;on pouvait lire sur twitter après coup.</p>
<p>Il a ensuite donné le lien d&#8217;une librairie pour <a  href="http://redotheoffice.com/?p=130">contrôler git depuis PHP (glib)</a> et a su répondre à la principale question:</p>
<dl>
<dt>Un équivalent de SVN externals?</dt>
<dd>Bien sûr, git uses submodules, mais il faut les mettre à jour à la main (donc 2 commandes au lieu d&#8217;une pour mettre à jour, ça reste raisonnable)</dd>
</dl>
<p><a  href="http://www.slideshare.net/chacon/git-101-presentation">Voir les slides</a></p>
<h4>Zend Framework</h4>
<p>Est arrivé, celui qui s&#8217;est présenté comme &laquo;&nbsp;N&#8217;est pas l&#8217;ennemi&nbsp;&raquo;, le lead developer du Zend Framework.<br />
Il a rappelé combien étaient nombreuses les librairies et composants développés et combien <strong>il était facile de les inclure dans symfony</strong>. Ca m&#8217;a d&#8217;ailleurs fait penser, que je ne regarde sans doute pas assez chez eux, quand j&#8217;ai besoin d&#8217;une librairie externe.</p>
<p><a  href="http://www.slideshare.net/weierophinney/using-zend-framework-with-symfony">Voir les slides</a><br />
Et Matthew a ensuite fait un debriefing son intervention <a  href="http://weierophinney.net/matthew/archives/232-Symfony-Live-2010.html">sur son blog</a>.</p>
<h3>Aprem</h3>
<h4>Implementing Symfony CMS</h4>
<p>La première touche hispanique de la conférence, qui nous a rappelé combien <strong>symfony était vraiment international</strong>. Marcos, nous a donc expliqué pourquoi avoir choisi symfony pour développer les CMS de leur client et l&#8217;approche qu&#8217;ils ont eu pour le réaliser.</p>
<p>Pas de gros scoop, ni d&#8217;exemple super concret mais une approche intéressante et surtout, t<strong>irée d&#8217;une vrai expérience dans le domaine</strong>.</p>
<p><a  href="http://www.slideshare.net/esmiz/implementing-a-symfony-based-cms-in-a-publishing-company">Voir les slides</a></p>
<h4>Event System</h4>
<p>Deuxième intervention de Dennis sur un des mécanismes sans doute le moins utilisé dans la panoplie Symfony, les events. Après avoir repris, ce qu&#8217;on peut trouver sur Symfony-Project, il a démontré pourquoi <strong>le couplage trop fort, c&#8217;était le mal </strong>- et donc <strong>les events le bien</strong> (ou le mal aussi, voir ci-dessous).</p>
<p>Un petit sondage fait sur twitter, a montré combien les possibilités étaient larges. Mais aussi qu&#8217;on pouvait en faire tout et n&#8217;importe quoi &#8211; Merci <a  href="http://twitter.com/ubermuda">ubermuda</a> pour la démonstration :p.<br />
Ce qui nous a valu l&#8217;expression &laquo;&nbsp;Events, No silver bullet!&nbsp;&raquo; &#8211; Entendre par là, que ce n&#8217;est pas la solution à tout.</p>
<p>En résumé, <strong>un event s&#8217;utilise pour du &laquo;&nbsp;couplage optionnel&nbsp;&raquo;</strong>, sinon ça revient à avoir un couplage fort également.</p>
<p>Des questions assez peu pertinentes dans l&#8217;ensemble, comme quoi, c&#8217;était pas clair pour tout le monde les events, la conf était donc nécessaire contrairement à ce qu&#8217;on pouvait lire sur twitter.</p>
<p><a  href="http://www.slideshare.net/denderello/symfony-live-2010-using-symfony-events-to-create-clean-class-interfaces">Voir les slides</a></p>
<h4>Symfony in the cloud</h4>
<p>Kris, de la core team, avec cette présentation aura remporté le prix des meilleurs transitions et de <strong>la slide la plus Hollywoodienne</strong>, avec une démo en temps réel de la création d&#8217;un nuage &#8211; musique de circonstance pour l&#8217;occasion &#8211; où il a réussi un tour de force en rajoutant un nuage en arrière plan de son nuage!<br />
Le public était conquis.</p>
<p>Plus sérieusement, il a pris comme support son site nebul.us, pour montrer comment <strong>interconnecter Symfony avec différents environnement à base de nuage</strong>, 3 serveurs Mysql &#8211; 1 Master, 2 Slaves &#8211; n apache, S3 pour le stockage.</p>
<p>De très belles démo de code pour bénéficier <strong>des nouvelles possibilités d&#8217;extension de Doctrine 1.2</strong> &#8211; à voir dans les slides &#8211; entre autres mais aussi d&#8217;<strong>utilisation de composant Zend</strong>.</p>
<p>L&#8217;effet démo ne l&#8217;aura au final pas épargné lui aussi, une tentative de release en direct de son plugin pour gérer les couples Master/Slave et un beau fail quand il est revenu sur la page d&#8217;accueil après qu&#8217;il se soit reloggué suite à l&#8217;expiration de sa session sur symfony-project :D</p>
<p>À noter que cette présentation aurait pu ne pas avoir lieu si <a  href="http://twitter.com/vjousse">Vince</a> n&#8217;avait pas sauvé la mise, en sortant un adaptateur dvi ancienne génération pour le prêter à Kris :p</p>
<p><a  href="http://www.slideshare.net/kriswallsmith/symfony-in-the-cloud">Voir les slides</a></p>
<h4>Debug Symfony</h4>
<p>Une vrai démonstration de l&#8217;approche à avoir pour <strong>vraiment optimiser son application</strong>. Plutôt que de se demander si echo sera plus rapide avec une virgule ou un point.</p>
<p>Il encourage de<strong> logguer en base</strong>, pour y avoir accès plus facilement et ajouter des notions de filtrage aisément et insiste sur<strong> les avantages du profiling</strong>, même s&#8217;il a oublié qu&#8217;<a  href="http://www.symfony-project.org/plugins/elXHProfPlugin">un plugin Symfony était dispo</a> pour ça .</p>
<p>On a pu noter les outils utilisés pour le benchmark et les metrics, <a  href="http://tsung.erlang-projects.org/">Tsung</a> et Graphite, que je ne connaissais pas. Toujours ça de bon à prendre aussi !</p>
<p>Une présentation très complète mais rien d&#8217;inédit que vous trouverez <a  href="http://www.slideshare.net/old_sound/debugging-and-profiling-symfony-apps">dans les slides</a>.</p>
<h4>Yahoooo</h4>
<p>Comme d&#8217;habitude, Dustin, membre de la core team, et Yahoo man est venu présenter un peu le boulot de Yahoo autour de symfony. Pourquoi symfony, leurs contributions, leurs modifications.<br />
Un petit tour des sites actuels développés sur le framework, avec un slide où on a pu apercevoir Shopgenie \o/ &#8211; la version anglaise de MonsieurPrix, développée par moi même ;) ca fait toujours plaisir!</p>
<p>Il a ensuite abordé le développement d&#8217;application web plus généralement et les bonnes questions à se poser concernant les choix à faire dans le design d&#8217;une architecture. Avec en guise de conclusion, une transition toute trouvée : &laquo;&nbsp;<strong>Symfony 2 is the right direction</strong>&nbsp;&raquo; !</p>
<p>On notera au passage un petit sondage de l&#8217;assistance sur les framework js, que<strong> jQuery a remporté</strong> avec une écrasante majorité.</p>
<p><a  href="http://www.slideshare.net/dustin.whittle/building-a-platform-from-open-source-at-yahoo-3209565">Voir les slides</a></p>
<h4>Symfony 2 preview</h4>
<p>Est arrivée, la présentation que tout le monde attendait, Symfony 2 ! Il faudrait un billet dédié à lui même, et on va beaucoup en parler dans les prochaines semaines, donc je vais pas m&#8217;attarder longtemps.</p>
<p>On peut retenir, que <strong>Symfony 2 sera orienté configuration</strong> &#8211; tout est configurable &#8211; et <strong>couplage faible</strong> avec un passage sur PHP 5.3. Il ne sera plus question également de développer des choses annexes, comme le logger ou le système de cache, mais d&#8217;<strong>utiliser des librairies reconnues</strong> pour ça (dont celles du Zend Framework justement).</p>
<p>Il a bien insisté sur le fait, que Symfony 2 pourra faire exactement les mêmes choses que la version 1, mais <strong>plus simplement et surtout plus rapidement</strong>. Avec par exemple, le lazy load &#8211; on charge seulement ce dont le framework a besoin.</p>
<p>Avec une conclusion &laquo;&nbsp;Faster as hell! &laquo;&nbsp;.</p>
<p>Bon il n&#8217;aura pas échappé à l&#8217;effet démo, avec une tentative de commit de la preview release en direct, qui s&#8217;est soldée également par un échec. Le compte Wifi de la Cité Universitaire était expiré ;-) Mais vous pouvez désormais récupérer le code source de cette première version et faire joujou avec sur <a  href="http://www.symfony-reloaded.org">le site dédié à Symfony 2</a> !</p>
<p><a  href="http://www.slideshare.net/fabpot/symfony-20-revealed">Voir les slides</a></p>
<p>Il ne restait plus qu&#8217;à faire le chemin inverse, Direction Marseille. En espérant avoir l&#8217;occasion de revenir ;)</p>
<p class="alignright">
<em>Vos envoyés spéciaux pour l&#8217;évènement: Vince et Tim</em>
</p>
<p style="clear: both">
<small>Crédit photo: http://www.flickr.com/photos/xavierbriand/4368850785/in/set-72157623335239339/</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/symfony-live-2010-2eme-journee/2010/02/19/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Symfony Live 2010 : 1ere journée</title>
		<link>http://www.amicalement-web.net/symfony-live-2010-1ere-journee/2010/02/17/</link>
		<comments>http://www.amicalement-web.net/symfony-live-2010-1ere-journee/2010/02/17/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 13:16:34 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1217</guid>
		<description><![CDATA[ Pour ceux qui suivent un peu l&#8217;actu Symfony, vous n&#8217;êtes pas sans savoir que se tient aujourd&#8217;hui et demain, le Symfony Live, un des évènements majeur du monde Symfony. Peut-être même que vous y êtes :D
Et bien ça tombe bien car Vince et moi même avons la chance d&#8217;y être également !

Se rendre au [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/symfony-live-2010-1ere-journee/2010/02/17"><img src="http://www.amicalement-web.net/wp-content/uploads/cite-internationale.jpg" alt="" title="cite-internationale" width="614" height="100" class="alignnone size-full wp-image-1246" /></a> Pour ceux qui suivent un peu l&#8217;actu Symfony, vous n&#8217;êtes pas sans savoir que se tient aujourd&#8217;hui et demain, le <a  href="http://www.symfony-live.com/">Symfony Live</a>, un des évènements majeur du monde Symfony. Peut-être même que vous y êtes :D</p>
<p>Et bien ça tombe bien car Vince et moi même avons la chance d&#8217;y être également !<br />
<span id="more-1217"></span></p>
<h3>Se rendre au Symfony Live</h3>
<p>Bon ce fut tout un marathon pour moi, levé 5h30 (et ceux qui me connaissent savent que c&#8217;est déjà un exploit :D), tram puis métro pour attraper mon TGV Marseille-Paris de 6h30.<br />
Arrivé à la gare de Lyon à 9h30, on repart pour une session métro, pour enchainer sur à nouveau un peu de tram avant d&#8217;arriver devant la Cité Internationale, endroit de Paris que je ne connaissais pas !</p>
<p>C&#8217;est déjà une belle surprise, l&#8217;endroit est fort sympathique, très joli, mais très graaand. Et j&#8217;ai pas trouvé les grandes affiches que j&#8217;attendais &laquo;&nbsp;Symfony C&#8217;est par là&nbsp;&raquo;. Bon finalement je débarque sur les coups de 10h30, badge, tour de cou et petit sac de goodies pour m&#8217;accueillir et me voilà dans l&#8217;arène.</p>
<p>Heureusement, il restait quelques croissants, parce que forcément j&#8217;avais fait l&#8217;impasse sur le petit déjeuner et je vais pas vous rappeler les tarifs prohibitifs de la SNCF. Juste de quoi me réveiller un peu et commencer à mettre en route mon cerveau qui jusque là ne voulait qu&#8217;une chose, se coucher.</p>
<h3>la matinée</h3>
<h4>Internationalisation</h4>
<p>On commence la journée par la présentation de <a  href="http://rabaix.net/">Thomas Rabaix</a> concernant l&#8217;internationalisation et Symfony. </p>
<p>Quelques rappels sur ce qu&#8217;est l&#8217;internationalisation, <strong>des astuces sympa comme comment traduire vos routes</strong>, mais aussi et surtout la présentation du plugin qu&#8217;il a réalisé pour <a  href="http://www.menugourmet.com/">Menu Gourmet</a> : <a  href="http://www.symfony-project.org/plugins/mgI18nPlugin">mgI18nPlugin</a>. Il permet de <strong>traduire à la volée</strong> toutes les chaînes statiques de votre page en utilisant une petit interface qui se place au dessus du site, à essayer d&#8217;urgence !<br />
Bref très bonne première présentation.</p>
<p>Vous pourrez trouver les slides de sa présentation <a  href="http://rabaix.net/en/articles/2010/02/16/symfony-live-2010-internationalization">sur son site</a>.</p>
<h4>Admin generator en détail</h4>
<p>John Cleveley nous a fait une petite piqure de rappel des nouveautés de l&#8217;admin generator depuis la version 1.0. Il a aussi été l&#8217;auteur du slide le plus classe de la journée concernant l&#8217;administration &laquo;&nbsp;backend&nbsp;&raquo; : un éléphant se soulageant le derrière dans un seau &#8230; ;-)</p>
<p>Il a rappelé que l&#8217;admin generator c&#8217;était bien, mais pas forcément pour tout. <strong>Qu&#8217;il fallait réfléchir au besoin avant de l&#8217;utiliser</strong>, plutôt que de partir avec tête baissée et se rendre compte plus tard qu&#8217;on passe plus de temps à galérer avec par rapport à ce qu&#8217;on veut faire qu&#8217;autre chose (sa remarque est d&#8217;ailleurs valable pour tout développement : c&#8217;est généralement une bonne idée de réfléchir avant de se lancer ! ).</p>
<p>Si vous voulez créer votre propre thème, vous pouvez vous inspirer de <a  href="http://www.symfony-project.org/plugins/sfAdminDashPlugin">sfAdminDashPlugin</a> et de <a  href="http://www.symfony-project.org/plugins/sfAdminThemejRollerPlugin">sfAdminThemejRollerPlugin</a>.</p>
<p>Il a aussi re-précisé que sfContext::getInstance c&#8217;était le mal (même si lui l&#8217;utilisait dans ses slides) et a fini par parler de la facilité de modifier/étendre les filtres grâce au form framework. En ce qui concerne les form, il est préférable d&#8217;en <strong>créer un nouveau pour chaque form du backend</strong>, histoire de pas confondre les forms front et back. </p>
<p>Il a conseillé d&#8217;utiliser <strong>le moins possible le generator pour les label, help etc des forms</strong>, mais de tout laisser dans le form : beaucoup plus facile à maintenir.</p>
<h4>Windows plaide coupable</h4>
<p>Surement parce qu&#8217;ils sont sponsor, on a retrouvé une équipe de Microsoft qui a plaidé pendant 50 longues minutes que Microsoft c&#8217;était aussi (et presque surtout) de l&#8217;open source et que développer dessus, c&#8217;était bien. Apparemment pas assez pour donner envie de poser des questions à l&#8217;auditoire.</p>
<p>Bon, ok sur windows, tu peux développer sur Visual Studio 2010 <strong>Ultimate</strong>, what else?</p>
<p>Du coup <a  href="http://answers.polldaddy.com/poll/2712522/">un petit sondage</a> a été lancé sur la répartition des OS pour les devs symfony</p>
<h3>L&#8217;aprèm</h3>
<h4>Symfony Internals</h4>
<p>Pas de nouveautés pour tous les développeurs qui ont pu travailler un peu en profondeur sur ce framework. <strong>Une belle revue de tout le fonctionnement interne </strong>de Symfony par Geoffrey Bachelet, et avec un accent so french ;)</p>
<p><a  href="http://www.slideshare.net/ubermuda/symfony-internals">Voir les slides</a></p>
<h4>Doctrine migration</h4>
<p>Un bon rappel sur l&#8217;enjeu des migrations et que maintenant (depuis sf 1.3) <strong>cela consiste en 3 opérations</strong> :</p>
<ul>
<li>Modifier son schema.yml pour inclure nos modifications</li>
<li>Lancer la task de diff:<br /> <code>symfony doctrine:generate-migrations-diff</code></li>
<li>Regénérer ces classes model/form/filter et lancer la migration:<br /> <code>symfony doctrine:build --all-classes --and-migrate</code></li>
</ul>
<p>Alors pourquoi s&#8217;en priver?</p>
<p><a  href="http://www.slideshare.net/denderello/symfony-live-2010-using-doctrine-migrations">Voir les slides</a></p>
<h4>Doctrine 2</h4>
<p>Est arrivé le tour de chauffe des gros sujets de la conférence. En l&#8217;occurrence Doctrine 2. Les grandes idées que Jonathan nous a montré:</p>
<ul>
<li><strong>100% réécrit</strong>, donc plus de compatibilité descendante</li>
<li><strong>~ 3 fois plus rapide</strong> que Doctrine 1.2</li>
<li>Principalement <strong>concentré sur la perf</strong>, et donc <strong>adieu la magie</strong> des findByMaColonne et consor. A l&#8217;image de Propel, les getteur et setteur seront générés dans la class model vu que les modèles justement n&#8217;hériteront plus d&#8217;une class de type Record, permettant ainsi d&#8217;alléger la charge mémoire</li>
<li>Intégration d&#8217;une classe qui s&#8217;occupera, à l&#8217;image du monde java, de <strong>gérer les flush et clear</strong>. Ca ne sera plus l&#8217;objet en lui même qu&#8217;il faudra &laquo;&nbsp;save&nbsp;&raquo; mais demander à cette nouvelle classe de le faire.</li>
</ul>
<p>Forcément, ca fait un peu peur, car au delà, d&#8217;une réécriture, ce sont des gros changements. Mais dans un souci de performance (aussi bien en terme de temps d&#8217;exécution que de charge mémoire), on prend le bon chemin. Même si la magie va disparaître&#8230;</p>
<p><a  href="http://www.slideshare.net/jwage/doctrine-2-not-the-same-old-php-orm">Voir les slides</a></p>
<h4>Offline admin generator</h4>
<p>Sur cette partie, on a retrouvé Thomat Parizot, de chez clever-age (vous savez ceux qui ont annoncé un plugin de gestion de media au dernier symfony live, mais qu&#8217;on attend toujours :p).<br />
On découvre <strong>un concept plutôt innovant</strong> dans le monde symfony, l&#8217;idée de permettre l&#8217;accès et <strong>le travail sur un backoffice sans connexion Internet</strong> semble une bonne idée. Il suffit de synchroniser, après coup, son travail.</p>
<p>Bon ok la démo n&#8217;a pas été parfaite &#8211; ahh l&#8217;effet démo &#8211; mais ya quand même un gros boulot derrière même si malheureusement c&#8217;est un concept très (trop?) <strong>dépendant de la technologie</strong>, vu qu&#8217;après Gears, il se base maintenant sur HTML5 et toutes ces nouvelles fonctionnalités. Donc très limité, mais à garder sous le coude.</p>
<h4>Help the community</h4>
<p>Skoop a redonner toutes les clés pour aider la communauté. Et que<strong> même les petites actions</strong>, comme les ouvertures de bug, sont très appréciées. </p>
<p><a  href="http://www.slideshare.net/skoop/the-symfony-community-how-to-get-help">Voir les slides</a></p>
<h4>Table ronde avec la core team</h4>
<p>Pas mal de questions sur les sujets classiques, hello world application, et consor. Voici un petit recap des questions que j&#8217;ai comprises et trouvées intéressantes:</p>
<dl>
<dt>Q: Compatibilité descendante avec la fin du support de la 1.0</dt>
<dd>R: Gros effort sur la facilité de passer à une version supérieure</dd>
<dt>Q: Documentation du système de form un peu en retrait?</dt>
<dd>R: Ne pas hésiter à aider!</dd>
<dt>Q: Symfony enseigné à l&#8217;école? Support de cours disponibles?</dt>
<dd>R: PHP déjà peut enseigné de base. Pas plus d&#8217;info à ce sujet mais ne pas hésiter à les contacter sur ce sujet</dd>
<dt>Q: Développement ne va pas trop vite?</dt>
<dd>R: La 1.4 aura bien 3 ans de support, ce qui est en soi, très long. Et puis le web évolue vite, donc il faut suivre</dd>
<dt>Q: Performance? Quid?</dt>
<dd>R: Le problème vient rarement du framework&#8230; :D </dd>
<dt>Q: Difficulté à faire adopter Symfony par leur client</dt>
<dd>R: C&#8217;est ensemble et en fournissant des cas d&#8217;utilisation précis de Symfony, qu&#8217;on pourra faire évoluer les mentalités</dd>
<dt>Q: Sismo? Bientôt dans les bacs?</dt>
<dd>R: Fabien n&#8217;a plus le temps pour l&#8217;instant. Projet en standby et clairement pas prioritaire. Et de toute façon Sismo ne fera jamais tout ce que fait Hudson et consor. Il n&#8217;a pas écarté la possibilité de ne jamais le release&#8230;</dd>
<dt>Q: Quid de la construction d&#8217;un vrai CMS Symfony une bonne foi pour toute?</dt>
<dd>R: Déjà 3 CMS existant très solides, avec 3 approches différentes. Il faut en débattre.</dd>
<dt>Q: Pourquoi reprendre plein de projets, comme Swift?</dt>
<dd>R: Une volonté de ne pas réinventer la roue et de récupérer et adapter les meilleurs pratiques et idées en PHP</dd>
<dt>Q: Et Propel dans tout ça?</dt>
<dd>R: Gros boulot de François, mais peut-être un peu trop tard?  Jamais dire jamais, mais pour l&#8217;instant après le gros switch vers Doctrine, difficile de faire machine arrière. Surtout que le futur de Propel avec sa 2.0 n&#8217;est pas du tout assuré pour l&#8217;instant</dd>
</dl>
<p>Et du coup, quelques annonces sont sorties:</p>
<ul>
<li><strong>phpbb4 sera codé en Symfony 2</strong>, ce qui en ferait le premier gros projet open source php entièrement en Symfony si je ne m&#8217;abuse</li>
<li>Symfony2 n&#8217;a plus de plugin mais des bundles&#8230;</li>
<li>Symfony2 n&#8217;utilisera plus que le meilleur des autres framework, comme le logger et le cache de Zend, <strong>au lieu de le recoder de leur côté</strong>.</li>
</ul>
<p>Voilà un petit compte rendu, les slides des différentes interventions sont disponible sur le <a  href="http://www.symfony-project.org/blog/2010/02/17/symfony-live-day-1">blog de Symfony</a>.</p>
<p class="alignright">
<em>Vos envoyés spéciaux pour l&#8217;évènement: Vince et Tim</em>
</p>
<p style="clear: both">
<small>crédit photo: http://www.flickr.com/photos/iph4n70m/4338366087/</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/symfony-live-2010-1ere-journee/2010/02/17/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Jouer avec symfony 2 sur github</title>
		<link>http://www.amicalement-web.net/jouer-avec-symfony-2-sur-github/2010/01/06/</link>
		<comments>http://www.amicalement-web.net/jouer-avec-symfony-2-sur-github/2010/01/06/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 07:59:44 +0000</pubDate>
		<dc:creator>Vince</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1111</guid>
		<description><![CDATA[
Comme vous ne l&#8217;avez peut-être pas loupé si vous suiviez le trac symfony ou si vous suivez les bonnes personnes ( ;-) ) sur twitter, symfony 2 utilise maintenant Git comme gestionnaire de version et non plus Svn. Le code source a été déplacé sur github ici. Cela devrait permettre plus de participations externes (ça [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/wp-content/uploads/entete_github.png"><img src="http://www.amicalement-web.net/wp-content/uploads/entete_github.png" alt="" title="entete_github" width="614" height="100" class="aligncenter size-full wp-image-1138" /></a></p>
<p>Comme vous ne l&#8217;avez peut-être pas loupé si vous suiviez le trac symfony ou si vous suivez les bonnes personnes ( ;-) ) sur twitter, symfony 2 utilise maintenant Git comme gestionnaire de version et non plus Svn. Le code source a été déplacé sur github <a  href="http://github.com/symfony/symfony">ici</a>. Cela devrait permettre plus de participations externes (ça a déjà commencé avec pborelli, CodingFabian et denderello), vu la facilité pour cloner un repository (le repository c&#8217;est l&#8217;endroit où sont stockées le sources à distance) avec git.<span id="more-1111"></span></p>
<p>Si comme moi, vous connaissez mal ou peu Git, vous pourrez commencer par lire le <a  href="http://learn.github.com/">&laquo;&nbsp;Learn GitHub&nbsp;&raquo;</a> qui pourra vous en apprendre un peu plus. Je vais essayer de vous donner les commandes de base pour récupérer en lecture seule ou en écriture le repository symfony 2<br />
<h3>Récupérer le code source</h3>
<p>
Le premier cas : vous souhaitez juste récupérer le code source pour jouer avec, sans le modifier. Dans ce cas, pas besoin de créer une branche du repository principal, récupérez le juste en lecture seule. Je pars ici du principe que vous êtes sur un *nix et que Git est installé, si vous n&#8217;avez pas installé Git allez le faire de ce pas, si vous êtes sous Windows je ne peux vous aider !
<p>
Rendez-vous sur <a  href="http://github.com/symfony/symfony">l&#8217;url du dépôt GitHub de symfony 2</a> et copiez l&#8217;url Read-Only qui devrait être : git://github.com/symfony/symfony.git
</p>
<p>
Vous pouvez ensuite récupérer les sources en local avec la commande</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">git clone git:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>symfony<span style="color: #000000; font-weight: bold;">/</span>symfony.git</pre></div></div>

<p>Vous aurez un beau répertoire symfony avec les sources.
</p>
<h3>Effectuer des changements</h3>
<p>Si vous voulez effectuer des changements comme un grand sur le code source de symfony, il vous faudra créer une branche. Vous devez être au préalable inscrit sur GitHub. Si vous vous rendez à <a  href="http://github.com/symfony/symfony">l&#8217;url du dépôt GitHub de symfony 2</a> vous devriez avoir quelque chose comme cela en haut : <a  href="http://www.amicalement-web.net/wp-content/uploads/github.png"><img src="http://www.amicalement-web.net/wp-content/uploads/github.png" alt="" title="github" width="300" height="42" class="aligncenter size-full wp-image-1123" /></a></p>
<p>
À la place de &laquo;&nbsp;Your fork&nbsp;&raquo; vous aurez la possibilité de forker. Je ne l&#8217;ai plus car j&#8217;ai déjà forké en fait ;-) Cela vous créera un repository dans votre compte GitHub auquel vous pourrez accéder comme précédemment, mais cette fois-ci en lecture/écriture. Juste l&#8217;url du repository devrait avoir changée, pour moi la commande c&#8217;est :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">git clone git<span style="color: #000000; font-weight: bold;">@</span>github.com:vjousse<span style="color: #000000; font-weight: bold;">/</span>symfony.git</pre></div></div>

<p>N&#8217;oubliez pas d&#8217;avoir généré et envoyé votre clef publique sur GitHub avant, sinon vous aurez une belle erreur. Voilà, vous pouvez maintenant effectuer vos changements et les répercuter sur le serveur comme expliqué dans le  <a  href="http://learn.github.com/">&laquo;&nbsp;Learn GitHub&nbsp;&raquo;</a>.
</p>
<h3>Symfony 2, un exemple de code</h3>
<p>Tout d&#8217;abord il va vous falloir PHP 5.3 d&#8217;installé, si ce n&#8217;est pas le cas n&#8217;allez pas plus loin ! Ensuite il va falloir vous faire aux namespaces PHP et ses \, mais ça ça viendra avec le temps ! Pour finir, allez faire un tour sur git pour recopier un <a  href="http://gist.github.com/296690">petit snippet d&#8217;ubermuda modifié par Fabien Potencier</a>. Je vous le recopie ici :</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// change this with the actual path you cloned sf2 to</span>
<span style="color: #000088;">$sf2_path</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'~/symfony/src'</span><span style="color: #339933;">;</span>
&nbsp;
use Symfony\Foundation\ClassLoader<span style="color: #339933;">;</span>
use Symfony\Components\CLI\Application<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">require_once</span> <span style="color: #000088;">$sf2_path</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/Symfony/Foundation/ClassLoader.php'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$loader</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ClassLoader<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$loader</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">registerNamespace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Symfony'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sf2_path</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$loader</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">register</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$app</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Application<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$app</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">run</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>On ne parle pour l&#8217;instant que du composant CLI de symfony 2 qui vient juste d&#8217;être ajouté, on ne manquera pas de vous tenir au courant du reste des évolutions par la suite. À vous de jouer !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/jouer-avec-symfony-2-sur-github/2010/01/06/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Symfony: Move ta Debug Bar</title>
		<link>http://www.amicalement-web.net/symfony-move-ta-debug-bar/2009/12/23/</link>
		<comments>http://www.amicalement-web.net/symfony-move-ta-debug-bar/2009/12/23/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 10:00:36 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1049</guid>
		<description><![CDATA[ Trivial, mais depuis le temps que ca me démangeait! Et peut-être que je ne suis pas le seul, d&#8217;où ce petit billet.
Quand je développe sous Symfony, régulièrement, je dois fermer ma précieuse debug bar pour accéder à un lien en dessous. Du coup je suis obligé de recharger la page pour m&#8217;en servir de [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/symfony-move-ta-debug-bar/2009/12/23/"><img src="http://www.amicalement-web.net/wp-content/uploads/speed.png" alt="speed" title="speed" width="614" height="100" class="alignnone size-full wp-image-1061" /></a> Trivial, mais depuis le temps que ca me démangeait! Et peut-être que je ne suis pas le seul, d&#8217;où ce petit billet.<br />
Quand je développe sous Symfony, régulièrement, je dois fermer ma précieuse debug bar pour accéder à un lien en dessous. Du coup je suis obligé de recharger la page pour m&#8217;en servir de nouveau et depuis la 1.3, je m&#8217;en passe plus moi de ma debug bar.</p>
<p>J&#8217;ai donc pris 5min de mon temps pour faire rapido presto, un petit coup de jquery pour pouvoir bouger ma debug bar!<br />
<span id="more-1049"></span><br />
Tout simplement, j&#8217;ai juste utilisé un <a  href="http://blog.threedubmedia.com/2008/08/eventspecialdrag.html">script jquery</a> qui permet d&#8217;ajouter un event de type &laquo;&nbsp;drag&nbsp;&raquo; à un élément du DOM. Un petit coup de jquery pour l&#8217;utiliser sur la debug bar:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#sfWebDebugBar&quot;</span><span style="color: #009900;">&#41;</span>
    .<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;dragstart&quot;</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span> event <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;right&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;auto&quot;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
    .<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;drag&quot;</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span> event <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        top<span style="color: #339933;">:</span> event.<span style="color: #660066;">offsetY</span><span style="color: #339933;">,</span>
        left<span style="color: #339933;">:</span> event.<span style="color: #660066;">offsetX</span>
      <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Il ne reste plus qu&#8217;à faire un petit filtre pour inclure ces 2 scripts automatiquement à la volée en environnement de dev. J&#8217;ai tout mis dans un petit plugin disponible plus bas mais je vous détaille le code ici pour ceux qui voudraient juste jeter un œil:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> moveWebDebugBarFilter <span style="color: #000000; font-weight: bold;">extends</span> sfFilter
<span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> execute<span style="color: #009900;">&#40;</span><span style="color: #000088;">$filterChain</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dev'</span> <span style="color: #339933;">==</span> sfConfig<span style="color: #339933;">::</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'sf_environment'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$response</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getContext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getResponse</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #000088;">$response</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addJavascript</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/moveDebugBarPlugin/js/jquery.event.drag-1.5.min.js'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'last'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$response</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addJavascript</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/moveDebugBarPlugin/js/moveDebugBar.js'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'last'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000088;">$filterChain</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">execute</span><span style="color: #009900;">&#40;</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>

<p>que l&#8217;on rajoute dans notre <code>filters.yml</code></p>

<div class="wp_syntax"><div class="code"><pre class="yml" style="font-family:monospace;">rendering: ~
security:  ~
&nbsp;
# insert your own filters here
moveDebugBar:
  class: moveWebDebugBarFilter
&nbsp;
cache:     ~
execution: ~</pre></div></div>

<p>Il ne reste plus qu&#8217;à télécharger:<br />
<a  href="http://www.amicalement-web.net/symfony-move-ta-debug-bar/2009/12/23/movedebugbarplugin/" rel="attachment wp-att-1050">moveDebugBarPlugin</a><br />
et à lancer un petit:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">php symfony plugin:publish-asset</pre></div></div>

<p>Le plugin est très basique et rudimentaire évidemment, il ne sera pas encore sur le site de Symfony du coup. Mais si vous avez des idées d&#8217;améliorations ou d&#8217;enrichissements hésitez pas, sait-on jamais.</p>
<p>Voilà le rendu en vidéo, a noter que je l&#8217;ai testé avec Symfony 1.2 et 1.3:<br />
<object id='stUE1TSkxIR19eRFVdW1NcU19R' width='425' height='344' type='application/x-shockwave-flash' data='http://www.screentoaster.com/swf/STPlayer.swf'  codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0'><param name='movie' value='http://www.screentoaster.com/swf/STPlayer.swf'/><param name='allowFullScreen' value='true'/><param name='allowScriptAccess' value='always'/><param name='flashvars' value='video=stUE1TSkxIR19eRFVdW1NcU19R'/></object>
<div style='width: 425px; text-align: right;'><a  href="http://www.screentoaster.com/">Capture your screen in seconds</a></div>
<p><small>Crédit photo: http://www.flickr.com/photos/kaidohmaru/453263320/</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/symfony-move-ta-debug-bar/2009/12/23/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Développement Web: les bons plans de la semaine #28</title>
		<link>http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-28/2009/12/21/</link>
		<comments>http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-28/2009/12/21/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 10:00:15 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Bons plans]]></category>
		<category><![CDATA[caroussel]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[rte]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1076</guid>
		<description><![CDATA[ Nous y voici, la semaine de noël. Et qui dit noël dit cadeaux!
Voici donc mon cadeau à moi, ma sélection de la semaine, heureux non?&#8230; Et si vous en voulez encore, il y a même un autre billet programmé pour mercredi, et même un autre, un billet invité, pour vendredi!

Et cette semaine, retour en [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="/developpement-web-les-bons-plans-de-la-semaine-28/2009/12/21/"><img src="http://www.amicalement-web.net/wp-content/uploads/gift1.png" alt="" title="gift" width="614" height="100" class="alignnone size-full wp-image-1078" /></a> Nous y voici, la semaine de noël. Et qui dit noël dit cadeaux!<br />
Voici donc mon cadeau à moi, ma sélection de la semaine, heureux non?&#8230; Et si vous en voulez encore, il y a même un autre billet programmé pour mercredi, et même un autre, un billet invité, pour vendredi!<br />
<span id="more-1076"></span><br />
Et cette semaine, retour en force de jQuery, à croire que les devs javascript se sont réveillés tous en même temps.</p>
<ul>
<li><a  href="http://blog.servergrove.com/2009/12/14/add-a-link-checker-panel-to-the-symfony-web-debug-toolbar/">Rajouter un vérificateur de lien à la debug bar Symfony</a><br />
Petit plugin sympa et qui permet de se familiariser un peu plus avec les possibilités d&#8217;extensions de cette merveilleuse toolbar.</li>
<li><a  href="http://rikrikrik.com/jquery/autosave/">Sauvegarder automatiquement le contenu de vos forms</a> (via <a  href="http://twitter.com/clementj">@clementj</a>)<br />
Plugin jquery qui permet de sauvegarder le contenu d&#8217;un formulaire tout seul comme un grand, pour éviter de perdre son travail sur un malentendu</li>
<li><a  href="http://jarodtaylor.com/meerkat/">Faites passer l&#8217;info en gros</a><br />
Autre plugin jQuery qui permet de faire des messages à l&#8217;utilisateur de bien jolie manière à mon goût</li>
<li><a  href="http://code.google.com/p/wkrte/">Un nouveau RTE en jquery</a><br />
Tout nouveau, il s&#8217;annonce comme un projet à suivre</li>
<li><a  href="http://fredhq.com/projects/roundabout/">Un coverflow en jquery</a><br />
Ok, un peu plus rudimentaire que son homologue en flash, mais très réactif et bien suffisant la plupart du temps je pense</li>
<li><a  href="http://www.kremalicious.com/2009/12/wordpress-post-thumbnails/">Wordpress 2.9 ajoute les vrais images pour les billets</a><br />
Avant, il fallait user de stratagèmes, maintenant on fait enfin ajouter une image dédiée pour un billet wordpress, tout ça de série</li>
<li><a  href="http://www.dummwiam.com/jSnow">C&#8217;est noël avec jquery</a><br />
Et oui, c&#8217;est de rigueur, faire tomber de la neige sur son blog! Bon ok je le ferai pas, mais peut-être que vous oui :p</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-28/2009/12/21/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Développement Web: les bons plans de la semaine #27</title>
		<link>http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-27/2009/12/14/</link>
		<comments>http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-27/2009/12/14/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 10:00:48 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Bons plans]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[graph]]></category>
		<category><![CDATA[inspiration]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[showcase]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1029</guid>
		<description><![CDATA[ Une sélection sans jQuery, sisi c&#8217;est possible! Comme quoi des fois on parle d&#8217;autre choses ici ;) Je me prend de plus en plus à lire des réflexions plutôt que des codes sources, donc vous allez forcément croiser plus de lectures que d&#8217;exemple de code tout fait pendant quelques temps.
Je vous rassure c&#8217;est rarement [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-27/2009/12/14"><img src="http://www.amicalement-web.net/wp-content/uploads/snowroad.png" alt="snowroad" title="snowroad" width="614" height="100" class="alignnone size-full wp-image-1045" /></a> Une sélection sans jQuery, sisi c&#8217;est possible! Comme quoi des fois on parle d&#8217;autre choses ici ;) Je me prend de plus en plus à lire des réflexions plutôt que des codes sources, donc vous allez forcément croiser plus de lectures que d&#8217;exemple de code tout fait pendant quelques temps.<br />
Je vous rassure c&#8217;est rarement du Shakespeare, même si c&#8217;est pas en français.<br />
<span id="more-1029"></span><br />
Allez c&#8217;est parti:</p>
<ul>
<li><a  href="http://netbeans.org/downloads/index.html">Netbeans 6.8 avec support Symfony final release</a><br />
Voilà, c&#8217;est fait, la dernière version de Netbeans est enfin stable et inclut donc de série le support de Symfony. Pour l&#8217;instant, elle a l&#8217;air vraiment stable comparé aux Releases Candidates. On va voir à l&#8217;utilisation</li>
<li><a  href="http://inspirationti.me/websites/web-apps/">De bien jolis sites</a><br />
Voilà une belle sélection de sites web dédié à la promotion d&#8217;application. C&#8217;est exactement ce genre de site que j&#8217;affectionne.</li>
<li><a  href="http://17webshop.com/2009/12/10/php-filters-and-how-to-use-them/">Les filtres PHP, exemples</a><br />
J&#8217;en avais déjà parlé, j&#8217;en remet une couche avec un billet très concret avec des exemples d&#8217;utilisation</li>
<li><a  href="http://davidwalsh.name/php-cache-function">Un cache basique en PHP</a><br />
Un exemple très basique d&#8217;utilisation de cache en PHP. Ca peut toujours servir à l&#8217;occasion</li>
<li><a  href="http://css-tricks.com/poll-results-css-formatting/">Comment formatez-vous votre CSS?</a><br />
Le résultat du dernier sondage de Chris Coyier, où le résultat est assez net. C&#8217;est en multiligne que la majorité formate son CSS. Personnellement, je fais un mix des 2, et vous?</li>
<li><a  href="http://www.jankoatwarpspeed.com/post/2009/12/12/No-registration-please.aspx">Une nouvelle approche d&#8217;inscription</a><br />
Les ergonomes n&#8217;en finissent pas de trouver l&#8217;ultime moyen de rendre la vie la plus facile à leurs internautes. Voici une nouvelle approche qui permet de simplifier encore plus la création d&#8217;un compte</li>
<li><a  href="http://brenelz.com/2009/12/09/what-makes-a-great-web-developer-twitter-developers-respond/">Qu&#8217;est-ce qu&#8217;un bon développeur?</a><br />
Une question ouverte sur twitter avec une sélection des réponses les plus pertinentes. Ca résume assez bien ma vision des choses</li>
<li><a  href="http://blog.creativityden.com/create-a-funky-most-commented-section-for-your-blog/">Un bloc de billets les plus commentés un peu funky</a><br />
Voici encore une belle démonstration de créativité.</li>
<li><a  href="http://www.insideria.com/2009/12/28-rich-data-visualization-too.html">Tour d&#8217;horizon des solutions de graphique web</a><br />
Jquery, Flash, and co, je vous parle souvent de solutions pour faire des graphiques. Voici un billet qui récapitule tout ça avec des screenshot pour le côté visuel</li>
<li><a  href="http://www.funstaff.ch/2009/12/13/symfony-afficher-un-message-en-cas-de-non-disponibilite-de-la-base-de-donnees">Filtre Symfony en cas de souci avec la bdd</a><br />
Petit filtre basique mais bien pensé qui permet d&#8217;intercepter les problèmes de connexion avec sa bdd et ainsi personnaliser l&#8217;affichage (ou autre).</li>
</ul>
<p><small>Crédit photo: http://www.flickr.com/photos/wait4thelight/422656134/</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-27/2009/12/14/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Développement Web: les bons plans de la semaine #26</title>
		<link>http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-26/2009/12/07/</link>
		<comments>http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-26/2009/12/07/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 10:00:40 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Bons plans]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[graph]]></category>
		<category><![CDATA[icone]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=1002</guid>
		<description><![CDATA[ Premier billet hors bon plans de la semaine jeudi dernier depuis quelques temps, on est sur la bonne voie pour reprendre les choses en mains. Même si ce sont des billets pas vraiment techniques encore, j&#8217;ai bon espoir d&#8217;arriver à reprendre un rythme un peu plus régulier. Celui de mercredi est même déjà programmé, [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-26/2009/12/07"><img src="http://www.amicalement-web.net/wp-content/uploads/christmas.png" alt="christmas" title="christmas" width="614" height="100" class="alignnone size-full wp-image-1006" /></a> Premier billet hors bon plans de la semaine jeudi dernier depuis quelques temps, on est sur la bonne voie pour reprendre les choses en mains. Même si ce sont des billets pas vraiment techniques encore, j&#8217;ai bon espoir d&#8217;arriver à reprendre un rythme un peu plus régulier. Celui de mercredi est même déjà programmé, c&#8217;est pour dire!</p>
<p>C&#8217;était pour vous tenir au courant un peu. Mais voici ce que vous êtes venu chercher, les bons plans de la semaine.<br />
<span id="more-1002"></span></p>
<ul>
<li><a  href="http://www.highcharts.com/">Des graphs en jQuery qu&#8217;ils sont beaux</a><br />
Le flash, j&#8217;aime pas trop, mais son utilisation pour des graphiques m&#8217;a toujours semblé adapté. Mais petit à petit jQuery grignote ce secteur, en voici une nouvelle illustration très réussie.</li>
<li><a  href="http://techportal.ibuildings.com/2009/12/01/profiling-with-xhprof/">Profiler vos script PHP</a><br />
Une alternative à xdebug très bien introduite par ce billet</li>
<li><a  href="http://www.sitepoint.com/blogs/2009/11/30/online-presentation-tools/">12 sites pour vos présentations en lignes</a><br />
Parce que c&#8217;est devenu un peu une grosse source de connaissance, les présentations exposées en conférence puis mise en ligne, les outils ne manquent donc pas.</li>
<li><a  href="http://webworkerdaily.com/2009/12/05/twittering-causes-blindness-busting-social-media-myths/">Les myths des réseaux sociaux</a><br />
Très bon article sur un sujet d&#8217;actualité</li>
<li><a  href="http://www.webdesignerdepot.com/2009/12/25-funny-t-shirts-for-designers-and-developers/">Des Tshirt pour graphistes et développeurs</a><br />
C&#8217;est bientôt noël, peut-être une idée de cadeaux se cache dans ce billet. Ils ne sont pas tous en vente, mais ils sont tous bien pensés.</li>
<li><a  href="http://designreviver.com/articles/better-drop-shadows-in-photoshop/">Une jolie ombre portée en photoshop</a><br />
Toujours dans la rubrique &laquo;&nbsp;passons nous des graphistes&nbsp;&raquo;, voici un petit tutorial pour une ombre portée très réussie.</li>
<li><a  href="http://redotheoffice.com/?p=120">Plugin symfony sfCodeReview</a><br />
Je ne le connaissais pas, mais je le trouve parfaitement bien pensé. ce plugin vous permettra de balayer le code source de Symfony directement depuis la debug bar</li>
<li><a  href="http://davidwalsh.name/javascrip-reflection">Reflet d&#8217;image en jquery</a><br />
Ca reste toujours sympa, surtout quand c&#8217;est bien codé.</li>
<li><a  href="http://www.webiconset.com/cute-blogging-icon-set/">Encore un set d&#8217;icone pour blog très bien fichu</a><br />
Très travaillé et coloré, tous les icônes indispensables pour réussir son thème de blog</li>
<li><a  href="http://www.jaervelae.com/mollify/index.php">Un explorateur de fichier en PHP</a><br />
Très belle réalisation, ce script pour permettra de vous balader dans l&#8217;arborescence de votre serveur web avec un certain style. Ajax et graphisme sont aussi au rendez-vous.</li>
</ul>
<p><small>crédit photo: http://www.flickr.com/photos/besimo/4094334183/</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/developpement-web-les-bons-plans-de-la-semaine-26/2009/12/07/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony: Une utilisation du type array de Doctrine</title>
		<link>http://www.amicalement-web.net/symfony-une-utilisation-du-type-array-de-doctrine/2009/11/04/</link>
		<comments>http://www.amicalement-web.net/symfony-une-utilisation-du-type-array-de-doctrine/2009/11/04/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 10:00:47 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Astuces]]></category>
		<category><![CDATA[astuce]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.amicalement-web.net/?p=925</guid>
		<description><![CDATA[ Oui, les billets Symfony commençaient à me manquer. Mais difficile de trouver et le temps et la ressource pour en faire. Mais voici une petite astuce illustrée qui permet de trouver une application au type array de Doctrine tout en simplifiant une problématique. Tout ce que j&#8217;aime.

Commençons par rendre à César ce qui est [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.amicalement-web.net/wp-content/uploads/check.png" alt="check" title="check" width="614" height="100" class="alignnone size-full wp-image-927" /> Oui, les billets Symfony commençaient à me manquer. Mais difficile de trouver et le temps et la ressource pour en faire. Mais voici une petite astuce illustrée qui permet de trouver une application au <a  href="http://www.doctrine-project.org/documentation/manual/1_1/en/defining-models#columns:data-types:array">type array de Doctrine</a> tout en simplifiant une problématique. Tout ce que j&#8217;aime.<br />
<span id="more-925"></span><br />
Commençons par rendre à César ce qui est à César, j&#8217;avais dans l&#8217;idée d&#8217;essayer ce type mais les exemples sur la doc ou sur le net n&#8217;était pas légion. En bon fainéant que je suis, j&#8217;ai demandé un peu d&#8217;aide et c&#8217;est mon nouveau voisin de droite, <a  href="http://twitter.com/colinux">Colin</a> qui m&#8217;a soufflé un bout de code où il l&#8217;utilise.</p>
<h3>Problématique</h3>
<p>Il me fallait stocker le résultat d&#8217;une question à choix multiple sans pour autant avoir à manipuler ensuite ses résultats autrement que par simple visualisation. Du coup, je voulais éviter d&#8217;avoir à créer une table pour stocker ces réponses et une table d&#8217;association avec ma table miroir de mon formulaire.</p>
<p>C&#8217;est là où le type array intervient. Rien de compliqué en fait, il ne fait que simplifier un traitement tout bête qui consiste à stocker un tableau php en base après sérialisation. Et qui le désérialise quand on le récupère depuis un enregistrement de la base.<br />
Une chose de moins à faire en fait et c&#8217;est bien là ce qu&#8217;on recherche nous autres développeurs, en faire le moins possible ;)</p>
<h3>La solution codée</h3>
<p>Niveau code, c&#8217;est très simple. On défini notre champ dans notre <code>schema.yml</code> comme n&#8217;importe quel autre champ</p>

<div class="wp_syntax"><div class="code"><pre class="yaml" style="font-family:monospace;">meschoix: { type: array(1000) }</pre></div></div>

<p>Qui donnera un champ text en mysql.</p>
<p>Ensuite, il suffit de modifier le formulaire obtenu pour transformer notre champ en liste de checkbox de manière très classique:</p>

<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;">widgetSchema</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'meschoix'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> sfWidgetFormChoice<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
      <span style="color: #0000ff;">'choices'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'0'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Choix1'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'1'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Choix2'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'2'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Choix3'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'3'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Choix4'</span>
      <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
      <span style="color: #0000ff;">'multiple'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
      <span style="color: #0000ff;">'expanded'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span>
    <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Et puis c&#8217;est tout! Maintenant, lors de l&#8217;enregistrement, Doctrine va sérialiser le résultat de votre sélection et le stocker en base. Et quand vous peuplerez votre formulaire avec des données en base, il le désérialisera et donnera les bonnes valeurs à notre liste de checkbox.</p>
<p>Bien sûr, ca nous oblige à ne pas changer l&#8217;ordre des questions et les rend difficilement modifiables. Mais c&#8217;est une décision qui doit être prise en connaissance de cette limitation.</p>
<p><small>Crédit photo: http://www.flickr.com/photos/40491122@N03/3738306829/</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.amicalement-web.net/symfony-une-utilisation-du-type-array-de-doctrine/2009/11/04/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
