<?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>Riad Benguella, Le blog &#187; Symfony</title>
	<atom:link href="http://blog.riadbenguella.com/tag/symfony/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.riadbenguella.com</link>
	<description>Développement, Web, High-Tech et autres</description>
	<lastBuildDate>Sat, 14 Jan 2012 12:22:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>RizewayFormBundle, Autcomplete à valeurs multiples pour Symfony2</title>
		<link>http://blog.riadbenguella.com/rizewayformbundle-autcomplete-a-valeurs-multiples-pour-symfony2/</link>
		<comments>http://blog.riadbenguella.com/rizewayformbundle-autcomplete-a-valeurs-multiples-pour-symfony2/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 09:53:32 +0000</pubDate>
		<dc:creator>Riad</dc:creator>
				<category><![CDATA[Mes Projets]]></category>
		<category><![CDATA[Bundle]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://blog.riadbenguella.com/?p=791</guid>
		<description><![CDATA[Mon premier Bundle Symfony 2 n&#8217;est rien d&#8217;autre qu&#8217;un &#171;&#160;type&#160;&#187; (widget pour les symfony 1.x users) pour vos formulaires. Le type &#171;&#160;rizeway_autocompleter&#160;&#187; vous permet donc d&#8217;afficher un champ de saisi avec l&#8217;autocompletion à valeurs multiples, en se basant sur le &#8230; <a href="http://blog.riadbenguella.com/rizewayformbundle-autcomplete-a-valeurs-multiples-pour-symfony2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="https://github.com/youknowriad/RizewayFormBundle">Mon premier Bundle</a> Symfony 2 n&#8217;est rien d&#8217;autre qu&#8217;un &laquo;&nbsp;type&nbsp;&raquo; (widget pour les symfony 1.x users) pour vos formulaires. Le type &laquo;&nbsp;rizeway_autocompleter&nbsp;&raquo; vous permet donc d&#8217;afficher un champ de saisi avec l&#8217;autocompletion à valeurs multiples, en se basant sur le widget jQuery UI d&#8217;autocomplete.<br />
<span id="more-791"></span><br />
<strong>Installation</strong><br />
Ajouter le bundle à votre dossier &laquo;&nbsp;src&nbsp;&raquo; :<br />
<code>git submodule add git://github.com/youknowriad/RizewayFormBundle.git src/Rizeway/FormBundle</code></p>
<p>Enregistrer le namespace &laquo;&nbsp;Rizeway&nbsp;&raquo; dans l&#8217;autoload :<br />
<code>// app/autoload.php<br />
$loader->registerNamespaces(array(<br />
    'Rizeway' => __DIR__.'/../src',<br />
    // Other namespaces<br />
));</code></p>
<p>Activez le bundle :<br />
<code>// app/AppKernel.php<br />
public function registerBundles()<br />
{<br />
    return array(<br />
        // ...<br />
        new Rizeway\FormBundle\RizewayFormBundle(),<br />
        // ...<br />
    );<br />
}</code></p>
<p><strong>Utilisation</strong><br />
Ajouter un champ &laquo;&nbsp;rizeway_autocompleter&nbsp;&raquo; à votre formulaire comme suit :<br />
<code>$builder->add('tags', 'rizeway_tinymce', array(<br />
    'url' => '/tags/get',<br />
));</code></p>
<p>Par défaut, les valeurs séparées par &laquo;&nbsp;,&nbsp;&raquo; sont transformés en tableau PHP dans votre objet métier, mais vous avez aussi la possibilité d&#8217;utiliser un &laquo;&nbsp;DataTransformer&nbsp;&raquo; custom grâce à l&#8217;option &laquo;&nbsp;value_transformer&nbsp;&raquo;, par exemple pour récupérer un tableau d&#8217;entités Doctrine au lieu d&#8217;un simple tableau de chaines de caractères.</p>
<p><strong>Plus de détails</strong><br />
N&#8217;hésitez pas à forker le bundle sur <a href="https://github.com/youknowriad/RizewayFormBundle">GitHub</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riadbenguella.com/rizewayformbundle-autcomplete-a-valeurs-multiples-pour-symfony2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Quel langage ? Quelle Technologie ?</title>
		<link>http://blog.riadbenguella.com/quel-langage-quelle-technologie/</link>
		<comments>http://blog.riadbenguella.com/quel-langage-quelle-technologie/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 09:51:57 +0000</pubDate>
		<dc:creator>Riad</dc:creator>
				<category><![CDATA[Développement web et programmation]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Langage]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://youknowriad.nomade-dz.com/?p=598</guid>
		<description><![CDATA[Avec la multiplication des technologies et des langages de programmation, les développeurs ont de plus en plus de mal à faire la part des choses. Il est souvent très difficile de faire un choix sur la technologie à utiliser ou &#8230; <a href="http://blog.riadbenguella.com/quel-langage-quelle-technologie/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Avec la multiplication des technologies et des langages de programmation, les développeurs ont de plus en plus de mal à faire la part des choses. Il est souvent très difficile de faire un choix sur la technologie à utiliser ou le nouveau langage de programmation sur lequel se former. Qui ne s&#8217;est jamais posé ces questions : Je me lance sur quelle techno ensuite ? Ce langage vaut t-il la peine qu&#8217;on s&#8217;y mette ?</p>
<p>Personnellement, voulant toujours être au top de la technologie, je me pose souvent ce genre de questions, et j&#8217;ai de plus en plus de mal à y répondre. Bien sur le choix souvent repose sur la nature des projets qu&#8217;on veux réaliser, les contraintes &#8230; mais qui ne s&#8217;est jamais dit, <strong>moi je veux tout maitriser !!!</strong> Bien sur, c&#8217;est tout simplement impossible, d&#8217;où cet article dans lequel je vais essayer de vous présenter les technologies que je connais (celles qui en valent la peine) et celles que je prévois d&#8217;apprendre (c&#8217;est juste mes choix personnels et nullement les choix à faire absolument).</p>
<p align="center"><img src="http://youknowriad.nomade-dz.com/wp-content/uploads/programming.jpg" alt="" title="programming" width="500" height="375" class="alignnone size-full wp-image-600" /></p>
<p><span id="more-598"></span></p>
<p><strong>Le couple HTML/CSS</strong></p>
<p>Je suis un fervent supporteur du <a href="http://youknowriad.nomade-dz.com/le-cloud-computing-linformatique-dans-les-nuages/">Cloud Computing</a> (je ne suis pas le seul), et je suis convaincu que le web représente le centre de toutes les technologies du futur. Et qui dit web, dit forcément HTML/CSS. Les navigateurs suivent plus ou moins bien cette tendance. Internet Explorer 6 est en declin (plus qu&#8217;un tout petit pourcentage) et les standards sont assez bien suivis par le reste des navigateurs. Le passage vers HTML5 et CSS3 est sur la bonne voie. </p>
<p><strong>Le langage PHP</strong></p>
<p>A mon avis, c&#8217;est un langage à maitriser absolument pour tout développeur web, pour différentes raisons : productivité, communauté, documentation, serveurs web, &#8230;. Malgré ses inconvénients liés à sa lourdeur lors des calculs complexes, il a encore de très beaux jours devant lui.</p>
<p><strong>Framework PHP : Symfony</strong></p>
<p>Le couplage de PHP à un framework est une nécessité pour tout projet de taille moyenne/grande. Et sur ce point la, les possibilités ne manquent pas : faire son propre framework, utiliser Zend Framework, Symfony, CodeIgniter &#8230; Mon choix se porte vers Symfony (et notamment <a href="http://youknowriad.nomade-dz.com/symfony-2-0-devoile-au-sflive-2010/">la version 2</a>) pour les raisons suivantes : flexibilité, documentation, communauté, à la pointe (design patterns, technos, mise à jour) &#8230;</p>
<p><strong>Javascript et son framework</strong></p>
<p>Après la maitrise d&#8217;un langage serveur, il est tout aussi important d&#8217;utiliser un langage client (notamment pour les RIA), et de ce coté la, on ne peux pas passer à coté de Javascript. Je vous disais que l&#8217;utilisation de frameworks est nécessaire pour les langages serveurs, c&#8217;est encore plus vrai pour javascript (langage client). Jj&#8217;utilise jQuery actuellement comme Framework Javascript, mais je ne suis pas convaincu à 100%. En réalité je n&#8217;ai pas encore trouvé le framework Javascript qui me convient le plus (je compte sur vous pour des suggestions <img src='http://blog.riadbenguella.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</p>
<p><strong>Systèmes d&#8217;exploitation type UNIX</strong></p>
<p>Mon avis personnel sur ce point est catégorique : vous êtes développeur web, oubliez windows (pour l&#8217;instant) !!! Il est absolument nécessaire de maitriser les systèmes d&#8217;exploitation type UNIX (GNU/Linux, FreeBSD, Mac OS &#8230;) et ceci notamment pour leur utilisation en tant que serveurs web.</p>
<p><strong>Développement d&#8217;applications Mobiles</strong></p>
<p>Ce n&#8217;est plus un marché à négliger, et je pense que l&#8217;iPhone et Android sont les deux poids lourds du futur des applications mobiles. Le développement pour iPhone implique donc la maitrise d&#8217;Objective-C, Cocoa Touch et XCode, et le développement pour Android implique quand à lui, JAVA et le SDK d&#8217;Android.</p>
<p><strong>Amazon Web Services</strong></p>
<p>Ce sont <a href="http://youknowriad.nomade-dz.com/amazon-revolutionne-le-cloud-bases-de-donnees-relationnelles/">les différents services amazon</a> pour le développement en Cloud computing. Actuellement ce sont les techologies les plus abouties dans ce domaine la. Les services les plus intéressants sont : Amazon S3 pour le stockage et, Amazon EC2 pour la puissance de calcul.</p>
<p><strong>Autres</strong></p>
<p>En plus de toutes ces technologies, d&#8217;autres non moins intéréssantes, mais que je trouve moins prioritaires pour l&#8217;instant viennent s&#8217;ajouter à ma liste d&#8217;attente des technologies à surveiller de prés : Python, Django, Le langage Go, Google App Engine, GWT, Microsoft Windows Azure.</p>
<p>Voila pour mes choix personnels, maintenant je compte sur vous pour nous faire part de vos choix  et suggestions.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riadbenguella.com/quel-langage-quelle-technologie/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Symfony 2.0 dévoilé au sfLive 2010</title>
		<link>http://blog.riadbenguella.com/symfony-2-0-devoile-au-sflive-2010/</link>
		<comments>http://blog.riadbenguella.com/symfony-2-0-devoile-au-sflive-2010/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 14:35:23 +0000</pubDate>
		<dc:creator>Riad</dc:creator>
				<category><![CDATA[Développement web et programmation]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Symfony 2.0]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://youknowriad.nomade-dz.com/?p=593</guid>
		<description><![CDATA[Cette semaine a eu lieu à Paris le &#171;&#160;sfLive&#160;&#187; (symfony Live), la conférence annuelle autour du framework PHP symfony (qui devient Symfony ). Malheureusement, je n&#8217;ai pas pu me déplacer à Paris pour y assister, mais j&#8217;ai tout de même &#8230; <a href="http://blog.riadbenguella.com/symfony-2-0-devoile-au-sflive-2010/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Cette semaine a eu lieu à Paris le &laquo;&nbsp;sfLive&nbsp;&raquo; (symfony Live), la conférence annuelle autour du framework PHP symfony (qui devient Symfony <img src='http://blog.riadbenguella.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ). Malheureusement, je n&#8217;ai pas pu me déplacer à Paris pour y assister, mais j&#8217;ai tout de même suivi les différentes annonces effectuées et notamment l&#8217;annonce la plus attendue, Le Framework Symfony 2.0 (version alpha).</p>
<p align="center"><img src="http://youknowriad.nomade-dz.com/wp-content/uploads/symfony_reloaded_20_preview_realese-500x123.png" alt="" title="symfony 2 reloaded" width="500" height="123" class="alignnone size-medium wp-image-594" /></p>
<p><span id="more-593"></span></p>
<p>Cette version vient directement améliorer les points les plus critiqués de la première version de symfony à savoir la rapidité, les performances, la facilité de prise en main et la flexibilité.</p>
<p><strong>Rapidité et performances :</strong></p>
<p>Selon les benchmarks effectués, Symfony 2.0 est 3 fois plus rapide que Symfony 1.4 et Zend Framework 1.10, 2 fois plus rapide que Solar 1.0 et 6 fois plus rapide que Cake PHP 1.2.6. Symfony consome également deux fois mois de mémoire que ses principaux concurrents. <a href="http://symfony-reloaded.org/fast">Détails des tests</a></p>
<p><strong>Facilité de prise en main :</strong></p>
<p>D&#8217;après les créateurs, vous pouvez commencer à développer en Symfony 2.0 après 10 minutes de lecture de <a href="http://symfony-reloaded.org/quick-tour-part-1">ce tour rapide</a> et au bout d&#8217;une heure vous maitriserez les fondements. Personnellement, après avoir lu rapidement le Quick Tour, j&#8217;ai trouvé Symfony 2.0 très simple. (mais c&#8217;est peut être parce que je connais déjà symfony 1).</p>
<p><strong>Flexibiltié :</strong></p>
<p>La principale amélioration de Symfony 2.0 est la réécriture de la partie basse du framework (kernel), en utilisant un conteneur d&#8217;injection de dépendances. Si vous n&#8217;êtes pas familiers avec cette notion, je vous invite à découvrir <a href="http://www.slideshare.net/fabpot/dependency-injection-with-php-53">les slides de Fabien Potencier</a> (le CEO de Sensio, l&#8217;éditeur derrière Symfony). Ce mécanisme permet à Symfony 2 d&#8217;être très flexible, puisque tout est paramétrable et que vous pouvez très simplement vous passer de certaines fonctions de Symfony par exemple, où bien utiliser vos propres classes pour les remplacer. Vous pouvez absolument tout changer.</p>
<p>Sachez que vous pouvez dés à présent utiliser et tester le framework, rendez vous sur <a href="http://symfony-reloaded.org">ce site</a> mis en ligne pour l&#8217;occasion. Personnellement je suis très satisfait par cette évolution (révolution), et je vais commencer illico à migrer quelques uns de mes projets vers Symfony 2 pour mieux cerner le framework.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riadbenguella.com/symfony-2-0-devoile-au-sflive-2010/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Créer des taches CRON simplement avec Symfony</title>
		<link>http://blog.riadbenguella.com/creer-des-taches-cron-simplement-avec-symfony/</link>
		<comments>http://blog.riadbenguella.com/creer-des-taches-cron-simplement-avec-symfony/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 13:35:39 +0000</pubDate>
		<dc:creator>Riad</dc:creator>
				<category><![CDATA[Développement web et programmation]]></category>
		<category><![CDATA[Cron]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://youknowriad.nomade-dz.com/?p=455</guid>
		<description><![CDATA[En pleine préparation de la version 2 de bloginy, je me suis mis à chercher la meilleure manière de faire des tâches cron avec symfony (des scripts qui s&#8217;exécutent périodiquement). La solution qui me convenait le plus était d&#8217;utiliser les &#8230; <a href="http://blog.riadbenguella.com/creer-des-taches-cron-simplement-avec-symfony/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>En pleine préparation de la version 2 de <a href="http://www.bloginy.com">bloginy</a>, je me suis mis à chercher la meilleure manière de faire des tâches cron avec symfony (des scripts qui s&#8217;exécutent périodiquement). La solution qui me convenait le plus était d&#8217;utiliser les tâches <a href="http://www.symfony-project.org">Symfony</a>.</p>
<p align="center"><img src="http://youknowriad.nomade-dz.com/wp-content/uploads/symfony.gif" alt="symfony" title="symfony" width="150" class="alignleft size-thumbnail wp-image-461" /></p>
<p><span id="more-455"></span></p>
<p><strong>Les tâches Symfony</strong></p>
<p>Vous savez, c&#8217;est toutes ces commandes qu&#8217;on lance à partir du terminal avec un namespace et un nom de tâche pour initialiser un projet par exemple ou construire le modèle de données (<em>./symfony propel:build-model</em>) ou toute autre commande. </p>
<p><strong>Création de la tâche</strong></p>
<p>Eh bain symfony nous permet de créer des tâches personnalisés à l&#8217;aide de la commande</p>
<p><code>./symfony generate:task monnamespace:matache</code></p>
<p>un fichier PHP est donc créé dans le dossier &#8216;lib/task&#8217; de votre projet, que vous pouvez personnaliser très aisément, puisque vous pouvez accéder directement aux classes du model.</p>
<p><code>addArguments(array(<br />
//   new sfCommandArgument('my_arg', sfCommandArgument::REQUIRED, 'My argument'),<br />
// ));<br />
&nbsp;<br />
$this-&gt;addOptions(array(<br />
new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name'),<br />
new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'),<br />
new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'propel'),<br />
// add your own options here<br />
));<br />
&nbsp;<br />
$this-&gt;namespace        = 'monnamespace';<br />
$this-&gt;name             = 'matache';<br />
$this-&gt;briefDescription = '';<br />
$this-&gt;detailedDescription = &lt;&lt;configuration);<br />
$connection = $databaseManager-&gt;getDatabase($options['connection'] ? $options['connection'] : null)-&gt;getConnection();<br />
&nbsp;<br />
&nbsp;<br />
// add your code here<br />
}<br />
}</code></p>
<p>Vous pouvez personnalisez ce fichier pour donner un titre et une description à cette tâche.</p>
<p>Une fois votre tâche créée et personnalisée, il ne vous reste plus qu&#8217;à créer la tâche CRON qui appelle cette tâche avec la commande suivante : <em>./symfony monnamespace:matache</em></p>
<p><strong>Exemple d&#8217;une tache :</strong></p>
<p>Voici un exemple de tâche que j&#8217;ai créé pour Bloginy.<br />
<code><?php<br />
class bloginyUpdateblogsfeedsTask extends sfBaseTask<br />
{<br />
  protected function configure()<br />
  {<br />
    // // add your own arguments here<br />
    // $this->addArguments(array(<br />
    //   new sfCommandArgument('my_arg', sfCommandArgument::REQUIRED, 'My argument'),<br />
    // ));<br />
&nbsp;<br />
$this-&gt;addOptions(array(<br />
new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name'),<br />
new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'),<br />
new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'propel'),<br />
// add your own options here<br />
));<br />
&nbsp;<br />
$this-&gt;namespace        = 'bloginy';<br />
$this-&gt;name             = 'update-blogs-feeds';<br />
$this-&gt;briefDescription = 'Met à jour les flux des blogs inscrits sur Bloginy';<br />
$this-&gt;detailedDescription = &lt;&lt;configuration);<br />
$connection = $databaseManager-&gt;getDatabase($options['connection'] ? $options['connection'] : null)-&gt;getConnection();<br />
&nbsp;<br />
// add your code here<br />
$count = BlogPeer::updateBlogFeeds();<br />
printf('%s articles ont été ajoutés à Bloginy.',$count);<br />
}<br />
}</code></p>
<p>Vous pouvez voir ici que tout le fonctionnement de cette tâche est effectué dans la classe du modèle &laquo;&nbsp;BlogPeer&nbsp;&raquo;.</p>
<p>Voilà j&#8217;espère que ça pourra aider plus d&#8217;un <img src='http://blog.riadbenguella.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riadbenguella.com/creer-des-taches-cron-simplement-avec-symfony/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Stage à PMSIpilot, Solutions pour établissements sanitaires</title>
		<link>http://blog.riadbenguella.com/stage-a-pmsipilot-solutions-pour-les-etablissement-sanitaire/</link>
		<comments>http://blog.riadbenguella.com/stage-a-pmsipilot-solutions-pour-les-etablissement-sanitaire/#comments</comments>
		<pubDate>Sun, 10 May 2009 19:18:51 +0000</pubDate>
		<dc:creator>Riad</dc:creator>
				<category><![CDATA[Mes Projets]]></category>
		<category><![CDATA[Personnel]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PMSIpilot]]></category>
		<category><![CDATA[Stage]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://youknowriad.nomade-dz.com/?p=387</guid>
		<description><![CDATA[Vous ne connaissez pas PMSIpilot ? Vous êtes sérieux ? c&#8217;est impossible, c&#8217;est la meilleure boite informatique du monde l&#8217;entreprise ou je vais passer un stage de 4 mois. Plus sérieusement, c&#8217;est une entreprise qui propose divers solutions aux établissement &#8230; <a href="http://blog.riadbenguella.com/stage-a-pmsipilot-solutions-pour-les-etablissement-sanitaire/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Vous ne connaissez pas <a href="http://www.pmsipilot.com/">PMSIpilot</a> ? Vous êtes sérieux ? c&#8217;est impossible, c&#8217;est <del datetime="2009-05-10T18:49:13+00:00">la meilleure boite informatique du monde</del> l&#8217;entreprise ou je vais passer un stage de 4 mois. Plus sérieusement, c&#8217;est une entreprise qui propose divers solutions aux établissement sanitaires. L&#8217;entreprise est leader en France dans son domaine.</p>
<p align="center"><a href="http://www.pmsipilot.com/"><img class="alignleft size-full wp-image-388" title="PMSIpilot" src="http://youknowriad.nomade-dz.com/wp-content/uploads/image-13.png" alt="PMSIpilot" width="157" height="160" /></a></p>
<p><span id="more-387"></span><br />
Je commence donc le stage demain et ma mission sera de développer un système de requêtage parametrable permettant d&#8217;explorer les différentes tables des solutions proposées par l&#8217;entreprise de manière aisée par les clients, et tenez vous bien chers lecteurs et et amis, en <a href="www.symfony-project.org/">Symfony</a>.</p>
<p><strong>Pourquoi avoir choisi ce stage</strong></p>
<ul>
<li>Cette entreprise correspond très bien à mes attentes futures pour ma carrière professionnelle en France,</li>
<li>Le développement en Symfony bien sur, ce qui me permettrai de perfectionner mes compétences sur ce framework que j&#8217;affectionne particulièrement,</li>
<li>J&#8217;ai bien aimé les locaux de l&#8217;entreprise et l&#8217;ambiance qui y règne,</li>
<li>La stratégie de l&#8217;entreprise qui est très à jour concernant les nouvelles technologies (ce qui n&#8217;est pas souvent le cas dans la majorité des entreprises),</li>
<li>Le secteur sanitaire bien sur (qui ne peut que faire plaisir à mes parents médecins lol, peut être qu&#8217;ils finiront par oublier que je n&#8217;ai pas fait médecine comme ils voulaient <img src='http://blog.riadbenguella.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).</li>
</ul>
<p>Alors souhaitez moi bon courage !!!</p>
<p>PS : J&#8217;ai failli oublier, pour ce qui s&#8217;intéresse au framework Symfony, n&#8217;hésitez pas à faire un tour sur <a href="http://www.glagla.org/weblog/">le blog très riche sur le sujet</a> de mon tuteur de stage.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riadbenguella.com/stage-a-pmsipilot-solutions-pour-les-etablissement-sanitaire/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Symfony 1.2, les nouveautés</title>
		<link>http://blog.riadbenguella.com/symfony-12-les-nouveautes/</link>
		<comments>http://blog.riadbenguella.com/symfony-12-les-nouveautes/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 10:28:06 +0000</pubDate>
		<dc:creator>Riad</dc:creator>
				<category><![CDATA[Développement web et programmation]]></category>
		<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[Jobeet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Propel]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://youknowriad.nomade-dz.com/?p=283</guid>
		<description><![CDATA[Et oui, cette semaine a vu le jour la version finale de Symfony 1.2, qui apporte son lot de nouveautés, plus utiles les unes que les autres. Ce n&#8217;est que pour faire le bonheur des développeurs Web. Après trois années &#8230; <a href="http://blog.riadbenguella.com/symfony-12-les-nouveautes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Et oui, cette semaine a vu le jour la version finale de <a href="http://www.symfony-project.org/installation/1_2">Symfony 1.2</a>, qui apporte son lot de nouveautés, plus utiles les unes que les autres. Ce n&#8217;est que pour faire le bonheur des développeurs Web. Après trois années que le framework est en Open Source, Symfony a su s&#8217;imposer comme étant l&#8217;un des meilleurs frameworks PHP, et cette nouvelle version est la pour consolider cette position.</p>
<p>Et comme une bonne nouvelle ne vient jamais seule, les développeurs ont pensé aussi aux débutants avec la mise en place d&#8217;un nouveau tutorial &laquo;&nbsp;<a href="http://www.symfony-project.org/jobeet/1_2/en/">Jobeet</a>&nbsp;&raquo; pour permettre de maitriser Symfony assez rapidement et se rendre compte de ces atouts.<span id="more-283"></span></p>
<p><strong>Les nouveautés de Symfony1.2</strong></p>
<ul>
<li><strong><em>ORM Doctrine et Propel :</em> </strong>Grâce à cette nouvelle version le plugin permettant d&#8217;utiliser l&#8217;ORM Doctrine est présent par défaut mais il ne remplace pas Propel, il faudra choisir votre configuration si vous voulez ce faire. <a href="http://youknowriad.nomade-dz.com/propel-couche-dabstraction-donnees-symfony/">Propel</a> quand à lui passe à la version 1.3, offrant ainsi de meilleures performances.</li>
</ul>
<ul>
<li><strong><em>Un nouveau générateur d&#8217;administration : </em></strong>comme vous le savez, Symfony vous évite la tâche fastidieuse de développer un gestionnaire d&#8217;administration pour vos applications web grâce à son générateur configurable à votre guise. Celui ci a complètement été réécrit grâce à la nouvelle gestion des formulaires introduites dans la version 1.1 mais tout en gardant une rétro compatibilité avec les versions précédentes.</li>
</ul>
<ul>
<li>Un nouveau système de routage (Architecture REST).</li>
</ul>
<ul>
<li>Amélioration de la gestion des formulaires MVC introduites dans la version 1.1</li>
</ul>
<ul>
<li><strong><em>Les helpers JAVASCRIPT, Scriptaculous et Prototype :</em> </strong>Les deux frameworks Javascript/AJAX (Scriptaculous et Prototype) sont maintenant intégrés grâce à des plugins séparés et de nouveaux helpers javascripts basiques ont été ajoutés.</li>
</ul>
<ul>
<li>Améliorations des tests fonctionnels.</li>
</ul>
<ul>
<li>Ainsi que d&#8217;autres améliorations plus ou moins importantes&#8230;</li>
</ul>
<p><strong>Jobeet</strong></p>
<p>Rappeler vous du premier tutorial <a href="http://www.symfony-project.org/askeet/1_0/fr/1">Askeet</a>, mis en place à l&#8217;occasion du lancement de la première version 1.0 de Symfony. Ce tutorial avait permis à un grand nombre d&#8217;adopter Symfony dans un temps record. Les développeurs cette fois ci frappe fort avec un nouveau tutorial &laquo;&nbsp;<a href="http://www.symfony-project.org/jobeet/1_2/en/">Jobeet</a>&nbsp;&raquo; qui va permettre de développer une VRAI application web fonctionnelle de A à Z en 24 heures à l&#8217;ordre d&#8217;une heure par jour.</p>
<p>Vous apprendrez donc l&#8217;utilisation du framework Symfony 1.2 et sentirez également l&#8217;apport énorme de ce framework en matière de développement d&#8217;applications web. Votre seul prérequis nécessaire est la connaissance des bases du PHP 5.</p>
<p>Ce tutorial servira également aux personnes ayant déja une certaine connaissance de Symfony puisqu&#8217;il leur permettra de se familiariser avec les nouveautés de cette nouvelle version.</p>
<p align="center"><a href="http://www.symfony-project.org/jobeet/1_2/en/"><img class="alignnone" title="Jobeet" src="http://www.symfony-project.org/images/jobeet/flyer_2_220_100.png" alt="" width="220" height="100" /></a></p>
<p>Moi aussi je v m&#8217;y mettre sans tarder<img onclick="grin(':bien:');" src="../wp-includes/images/smilies/good.png" alt=":bien:" />, la première heure du tutorial c&#8217;est <a href="http://www.symfony-project.org/jobeet/1_2/en/01">par ici</a> (en anglais seulement pour l&#8217;instant, mais la traduction ne devrait pas tarder).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riadbenguella.com/symfony-12-les-nouveautes/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Faille XSS, et Symfony</title>
		<link>http://blog.riadbenguella.com/faille-xss-et-symfony/</link>
		<comments>http://blog.riadbenguella.com/faille-xss-et-symfony/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 19:04:42 +0000</pubDate>
		<dc:creator>Riad</dc:creator>
				<category><![CDATA[Développement web et programmation]]></category>
		<category><![CDATA[Escaping]]></category>
		<category><![CDATA[Faille]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://youknowriad.nomade-dz.com/?p=252</guid>
		<description><![CDATA[Que est ce que la faille XSS ? XSS ou le cross site scripting est l&#8217;une des failles les plus répandues dans les sites web dynamiques si ce n&#8217;est la plus répandue. Elle consiste en fait au passage d&#8217;un code &#8230; <a href="http://blog.riadbenguella.com/faille-xss-et-symfony/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Que est ce que la faille XSS ?</strong></p>
<p><em><strong>XSS </strong></em>ou le<em><strong> cross site scripting </strong></em>est l&#8217;une des failles les plus répandues dans les sites web dynamiques si ce n&#8217;est la plus répandue. Elle consiste en fait au passage d&#8217;un code éxécutable par le navigateur (JavaScript ou autre) en utilisant des formulaires ou diréctement l&#8217;URL. L&#8217;exploitation de cette faille permeterai notemment d&#8217;éxécuter des scripts douteux directement dans votre serveur web, c&#8217;est qui fournirai par exemple énormément d&#8217;informations sur le serveur &#8230;<span id="more-252"></span></p>
<p>Pour vérifier la présence d&#8217;une telle faille dans un formulaire par exemple, il suffit de remplir un champ du formulaire ou tous les champs (ça dépend du formulaire) par exemple par :</p>
<p><code>&lt;script&gt;alert('Ceci est une faille XSS')&lt;/script&gt;</code></p>
<p><strong>Symfony et la faille XSS ?</strong></p>
<p>J&#8217;ai longtemps cru à tord que symfony était par défaut protégé contre ce type de failles, jusqu&#8217;à ce qu&#8217;un testeur de <a href="http://www.bloginy.com">Bloginy</a> (un projet fait avec Symfony), m&#8217;indique que mon formulaire de recherche est vulnérable. En fait, symfony dispose d&#8217;une manière automatique d&#8217;éviter ces failles, mais ne l&#8217;active pas par défaut.</p>
<p>Pour palier à ces failles, symfony dispose donc d&#8217;un moyen d&#8217;échapement (<strong>escaping</strong>) pour tous vos données manipulés (c&#8217;est à dire que vos données sont automatiquement convertis au code XHTML correspondant). Par exemple, si vous entrez : <strong><em>&lt;script&gt;alert(&#8216;Ceci est une faille XSS&#8217;)&lt;/script&gt;</em></strong>, bain en réalité vous manipulerez le texte suivant : <strong><em>&amp;lt;script&amp;gt;alert(&#8216;Ceci est une faille XSS&#8217;)&amp;lt;/script&amp;gt;</em></strong>. Et ce texte ne poura être éxécuté en tant que code par le navigateur.</p>
<p><strong>Comment activer l&#8217;échappement automatique ?</strong></p>
<p>Rien de plus simple, par défaut Symfony utilise la stratégie d&#8217;échappement &laquo;&nbsp;bc&nbsp;&raquo;, qui ne vous protège pas par défaut des failles XSS, il faut donc modifier le fichier setting.yml de votre application Symfony comme suit :</p>
<p><code>all:<br />
&nbsp;&nbsp;.settings:<br />
&nbsp;&nbsp;&nbsp;&nbsp;escaping_strategy: both<br />
&nbsp;&nbsp;&nbsp;&nbsp;escaping_method: ESC_ENTITIES</code></p>
<p>Maintenant, toutes vos données seront transformées, et vous êtes protégés automatiquement de ce genre de failles.</p>
<p><strong>Et si je voulais que le code soit interprété :</strong></p>
<p>Il peut arriver que vous ayez besoin que le navigateur interprète ce que l&#8217;utilisateur entre, tel qu&#8217;il est. Par exemple pour afficher du code HTML généré par les utilisateurs (dans le cas d&#8217;un message dans un forum par exemple). Rien de plus simple la aussi, une variable transformée <em><strong>$var</strong></em>, est accessible sans échappement comme ceci : <strong>$sf_data-&gt;get(&#8216;test&#8217;)</strong>.</p>
<p>Si votre donnée est un objet, et que vous désirez accéder à un membre de cet objet sans échappement, rien de plus simple : <strong>$objet-&gt;getRawValue()-&gt;getMembre()</strong>.</p>
<p>Voilà, j&#8217;espère que vous êtes maintenant plus éclairés sur les failles XSS, et la manière de les évitez grâce au framework Symfony. Si vous rencontrez toujours des problèmes, n&#8217;hésitez pas à laisser des commentaires.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riadbenguella.com/faille-xss-et-symfony/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Propel, la puissante couche d&#8217;abstraction de Symfony</title>
		<link>http://blog.riadbenguella.com/propel-couche-dabstraction-donnees-symfony/</link>
		<comments>http://blog.riadbenguella.com/propel-couche-dabstraction-donnees-symfony/#comments</comments>
		<pubDate>Fri, 03 Oct 2008 20:06:40 +0000</pubDate>
		<dc:creator>Riad</dc:creator>
				<category><![CDATA[Développement web et programmation]]></category>
		<category><![CDATA[mySQL]]></category>
		<category><![CDATA[Propel]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://youknowriad.nomade-dz.com/propel-la-puissante-couche-dabstraction-de-symfony/</guid>
		<description><![CDATA[Comme je l&#8217;avait mentionné dans l&#8217;article sur l&#8217;architecture MVC, Symfony s&#8217;appuie grandement sur la couche d&#8217;abstraction de données &#171;&#160;Propel&#160;&#187; (on peut modifier cette couche par &#171;&#160;Doctrine&#160;&#187; par exemple). C&#8217;est certainement l&#8217;une des parties les plus importantes du Framework Symfony. Propel &#8230; <a href="http://blog.riadbenguella.com/propel-couche-dabstraction-donnees-symfony/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Comme je l&#8217;avait mentionné dans l&#8217;article sur <a href="http://youknowriad.nomade-dz.com/mvc-model-view-controller-symfony/">l&#8217;architecture MVC</a>, Symfony s&#8217;appuie grandement sur la couche d&#8217;abstraction de données &laquo;&nbsp;Propel&nbsp;&raquo; (on peut modifier cette couche par &laquo;&nbsp;Doctrine&nbsp;&raquo; par exemple). C&#8217;est certainement l&#8217;une des parties les plus importantes du Framework Symfony. Propel vous fait gagner un temps fou dans la manipulation des données issus de vos bases de données.</p>
<p><span id="more-195"></span></p>
<p><strong>Que est-ce qu&#8217;une couche d&#8217;abstraction de données ?</strong></p>
<p>D&#8217;un point de vue matériel, une couche d&#8217;abstraction est l&#8217;ensemble des pilotes permettant aux applications d&#8217;accéder facilement aux différents périphériques. De la même manière, une couche d&#8217;abstraction de données vous permet d&#8217;accéder à vos bases de données de façon très simple et complètement indépendante du SGBD.</p>
<p><strong>La puissance de propel :</strong></p>
<p>La meilleure manière d&#8217;illustrer cette puissance est de faire un petit tutorial Symfony qui fera les actions suivantes : création de la base de données et des structures de données permettant l&#8217;accès à votre base et ceci en 5 minutes.</p>
<p>Alors pour faire tout ceci, la seule &laquo;&nbsp;véritable tache&nbsp;&raquo; après avoir créé votre projet Symfony et votre application (ceci a déjà été abordée dans la deuxième partie de l&#8217;article concernant <a href="http://youknowriad.nomade-dz.com/installer-symfony-mac-os-mamp/">l&#8217;installation de Symfony</a>) est de décrire la structure des de vos données (les tables de votre base de données).</p>
<p>Ceci peut être fait de deux manière, l&#8217;XML ou bien le YAML qui est le langage de spécification de base de Symfony (ne vous inquiétez pas, ce n&#8217;est pas un autre langage à apprendre, c&#8217;est le plus simple de tous les langages de spécifications). La structure de vos données sera donc écrite dans le fichier schema.yml (ou schema.xml) qui se trouve dans le dossier config de votre projet Symfony.</p>
<p><strong><em>Exemple de schema ( /votreProjet/config/schema.yml) :</em></strong><br />
<code>propel:<br />
&nbsp;&nbsp;patient:<br />
&nbsp;&nbsp;&nbps;&nbps;id :<br />
&nbsp;&nbsp;&nbsp;&nbsp;nom : varchar<br />
&nbsp;&nbsp;&nbsp;&nbsp;prenom : varchar<br />
&nbsp;&nbsp;&nbsp;&nbsp;date_naissance : date<br />
&nbsp;&nbsp;&nbsp;&nbsp;notes : text<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;visite:<br />
&nbsp;&nbsp;&nbsp;&nbsp;id :<br />
&nbsp;&nbsp;&nbsp;&nbsp;motif : varchar<br />
&nbsp;&nbsp;&nbsp;&nbsp;date_visite : date<br />
</code><br />
Ensuite vous devrez créer une base de données que vous nommerez par exemple &laquo;&nbsp;maBDD&nbsp;&raquo;. Il reste ensuite à configurer Symfony pour qu&#8217;il sache accéder à cette base de donnée. Ceci se fait dans deux fichiers principaux. Tout d&#8217;abord le fichier &laquo;&nbsp;databases.yml&nbsp;&raquo; et le fichier &laquo;&nbsp;propel.ini&nbsp;&raquo; présents dans le dossier config de votre projet.</p>
<p><em><strong>Exemple de fichier (/MonProjet/config/databases.yml) :</strong></em><br />
<code>all:<br />
&nbsp;&nbsp;propel:<br />
&nbsp;&nbsp;&nbsp;&nbsp;class:          sfPropelDatabase<br />
&nbsp;&nbsp;&nbsp;&nbsp;param:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dsn:          mysql://user:pass@localhost/maBDD<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encoding: utf8</code></p>
<p><em><strong>Exemple de fichier (/MonProjet/config/propel.ini) :</strong></em><br />
<code>propel.targetPackage       = lib.model<br />
propel.packageObjectModel  = true<br />
propel.project             = votreProjet<br />
propel.database            = mysql<br />
propel.database.createUrl  = mysql://user:pass@localhost/<br />
propel.database.url        = mysql://user:pass@localhost/maBDD<br />
&nbps;&nbps;<br />
....</code></p>
<p>Voila maintenant, il ne vous reste plus qu&#8217;à taper quelques commandes, alors ouvrez votre terminal et accéder au dossier de votre projet symfony et ensuite tapez la commande suivante :</p>
<p><code>$ symfony propel:build-all<br />
</code></p>
<p>ou bien pour la version 1.0 de Symfony</p>
<p><code>$ symfony propel-build-all<br />
</code><br />
<strong>Comprendre Propel et le model généré</strong></p>
<p>La commande précédente effectue différentes taches répétitives pour chaque projet et vous fait donc gagner un temps énorme.</p>
<p>1- Elle crée un fichier SQL, qui contient le code de création de vos tables de base de donnée.</p>
<p>2- Elle exécute ce code SQL sur votre serveur de bases de données, c&#8217;est à dire qu&#8217;elle va créer vos tables dans votre base de données.</p>
<p>3- Le point le plus important, elle généré les différentes classes d&#8217;abstraction pour la manipulation de vos données sans à accéder directement à la base de donnée et sans utiliser de requêtes SQL. Il est à noter également que propel détecte instinctivement les relations entre vos différentes tables (comme la relation entre les visites et le patient dans notre exemple)</p>
<p>Pour chaque table, elle crée deux classes : La première (tablePeer) est celle permettant de manipulant les enregistrements, c&#8217;est à dire offrant un ensemble de primitives pour la sélection, la suppression &#8230; selon certains critères.</p>
<p><strong>exemple :</strong></p>
<p><code>&lt;?php<br />
&nbsp;&nbsp;<br />
$this-&gt;patients = PatientPeer::doSelect(new Criteria()); // Selection de tous les patients<br />
&nbsp;&nbsp;<br />
?&gt;</code></p>
<p>Et la deuxième représentant un enregistrement (un tuple), permettant d&#8217;accéder aux attributs, de les modifier, de sauvegarder l&#8217;enregistrement&#8230;</p>
<p>L&#8217;insertion d&#8217;un nouvel élément dans une table de base de données, reviendrai donc à créer un nouvelle objet, de remplir ses valeurs et de l&#8217;enregistrer</p>
<p><strong>exemple :</strong></p>
<p><code>&lt;?php<br />
&nbsp;&nbsp;<br />
$patient = new Patient();<br />
&nbsp;&nbsp;<br />
$patient-&gt;setNom("Benguella");<br />
$patient-&gt;setPrenom("Riad");<br />
&nbsp;&nbsp;<br />
$patient-&gt;save();<br />
&nbsp;&nbsp;<br />
?&gt;<br />
</code><br />
Voila mon but à travers cet article n&#8217;était pas de vous familiariser avec Propel (Et si vous avez un problème technique ou autre, n&#8217;hésitez pas à me contacter ou laissez un commentaire), mais surtout de vous montrer l&#8217;étendu de ses avantages et possibilités.</p>
<p><strong>Remarque :</strong> Dans la nouvelle version de propel, quelques modifications affectent la configuration de Propel dans le fichier propel.ini : il faut par exemple utiliser &laquo;&nbsp;propel.database.creole.url&nbsp;&raquo; au lieu de  &laquo;&nbsp;propel.database.createUrl&nbsp;&raquo;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riadbenguella.com/propel-couche-dabstraction-donnees-symfony/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>MVC, ou comment développer avec classe</title>
		<link>http://blog.riadbenguella.com/mvc-model-view-controller-symfony/</link>
		<comments>http://blog.riadbenguella.com/mvc-model-view-controller-symfony/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 10:24:21 +0000</pubDate>
		<dc:creator>Riad</dc:creator>
				<category><![CDATA[Développement web et programmation]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Méthode]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://youknowriad.nomade-dz.com/?p=180</guid>
		<description><![CDATA[Nombreux sont les développeurs qui pour développer une application (web ou desktop) s&#8217;attaquent directement au code source comme des aveugles et sans aucune organisation (ne nier pas ce qui est vrai lol), et ceci afin d&#8217;avoir des résultats le plus &#8230; <a href="http://blog.riadbenguella.com/mvc-model-view-controller-symfony/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Nombreux sont les développeurs qui pour développer une application (web ou desktop) s&#8217;attaquent directement au code source comme des aveugles et sans aucune organisation (ne nier pas ce qui est vrai lol), et ceci afin d&#8217;avoir des résultats le plus vite possible. Le problème c&#8217;est que même si pour les tout petits (et j&#8217;ai bien dit, les tout petits) projets, cette méthode s&#8217;avère pratique, elle est complètement inconcevable dés que votre projet gagne en complexité.<span id="more-180"></span><br />
Par soucis de performance, des méthodes de conception et développement ont été mises en place. Elles offrent plusieurs avantages dont le découpage du projet (ce qui facilite le travail en équipes), faciliter la maintenabilité du projet, en le structurant d&#8217;une manière cohérente&#8230;</p>
<p><strong>MVC &#8211; Model View Controller -</strong></p>
<p>C&#8217;est une méthode et également une architecture pour vos applications développée 1979 en par Trygve Reenskaug, mais c&#8217;est seulement avec l&#8217;arrivée des interfaces graphiques qu&#8217;elle a pris son envol. Elle se base sur le découpage de votre application (en réalité, une partie seulement de votre application, la plus proche de l&#8217;IHM) en trois couches principales, le Modèle , la présentation et le contrôleur :</p>
<ul>
<li>Le modèle (Model) : ou modèle de données, c&#8217;est la partie qui s&#8217;occupe de l&#8217;interaction avec les données du systèmes (bases de données, fichiers, flux RSS &#8230;)</li>
<li>La présentation : c&#8217;est la partie que voit l&#8217;utilisateur pour l&#8217;affichage des résultats en sortie et son second rôle est de recevoir les entrées des utilisateurs.</li>
<li>Le controlleur : c&#8217;est &laquo;&nbsp;le gestionnaire d&#8217;événements&nbsp;&raquo;, il reçoit les différents événements et se charge de synchroniser les deux autres couches.</li>
</ul>
<p><strong>Exemple de mise en oeuvre</strong></p>
<p>Assez parlé, ceux qui veulent en savoir plus, peuvent consulter Wikipédia ou autre. La meilleure façon d&#8217;apprendre et de comprendre c&#8217;est la pratique. Pour ça je vais essayer de vous expliquer le mécanisme de fonctionnement de Symfony qui est basé complètement sur une architecture MVC pour développer des applications web.</p>
<ul>
<li><strong>Le modèle :</strong> Cette couche de Symfony est basé sur Propel (ou bien Doctrine), et c&#8217;est la couche d&#8217;abstraction de données c&#8217;est à dire que l&#8217;accès au données se fera dans cette couche. Dans le cas habituel d&#8217;une base donnée, Propel se charge d&#8217;une grande partie de cette couche et vous fournit des classes d&#8217;accès à vos tables de données (les différent SELECT &#8230;) et des classe de représentation de vos données (pour faciliter la manipulation des données issus de vos tables). Vous pourrez bien sur étendre ce modèle à votre guise.</li>
<li><strong>La vue :</strong> Représentée dans Symfony par les différentes interfaces. Concrètement c&#8217;est le code XHTML de vos pages web, dénudés de tout traitement PHP si ce n&#8217;est des &laquo;&nbsp;echo&nbsp;&raquo; pour afficher les données reçues du controlleur, par exemple (une fiche utilisateur) :</li>
</ul>
<blockquote><p>&lt;h1&gt;&lt;?php echo $user-&gt;getUsername(); ?&gt;&lt;/h1&gt;</p>
<p>&lt;?php if ($user-&gt;hasAvatar()) : ?&gt;<br />
&lt;?php echo image_tag($user-&gt;getAvatar()) ; ?&gt;<br />
&lt;?php endif; ?&gt;</p>
<p>&lt;p&gt;<br />
Nom : &lt;?php echo $user-&gt;getNom(); ?&gt; &lt;br /&gt;<br />
Prenom : &lt;?php echo $user-&gt;getPrenom(); ?&gt;<br />
&lt;/p&gt;</p></blockquote>
<ul>
<li><strong>Le controlleur :</strong> représenté par des actions, Il gérent les évenements sur votre application web, par exemple l&#8217;appel d&#8217;URL ou, une action AJAX ou autre. Un exemple de recherche de l&#8217;utlisateur avec l&#8217;id n° 10 pour l&#8217;afficher grâce à la vue précédente serait :</li>
</ul>
<blockquote><p>public function executeUserId()</p>
<p>{<br />
$this-&gt;user = UserPeer::retrieveByPk(10);<br />
}</p></blockquote>
<p align="center"><img class="alignnone size-full wp-image-181" title="MVC, Model View Controller" src="http://youknowriad.nomade-dz.com/wp-content/uploads/mvc.png" alt="" width="400" height="188" /></p>
<p>Voilà j&#8217;éspère qu&#8217;avec ça, vous êtes maintenant convaincu de l&#8217;utilité d&#8217;une méthode comme MVC et de la facilité et de l&#8217;élégance de développement qu&#8217;elle peut apporter.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riadbenguella.com/mvc-model-view-controller-symfony/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Installer Symfony sous Mac OS X en utilisant MAMP</title>
		<link>http://blog.riadbenguella.com/installer-symfony-mac-os-mamp/</link>
		<comments>http://blog.riadbenguella.com/installer-symfony-mac-os-mamp/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 08:23:14 +0000</pubDate>
		<dc:creator>Riad</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Développement web et programmation]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[MAMP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://youknowriad.nomade-dz.com/?p=33</guid>
		<description><![CDATA[A mes débuts sous symfony, j&#8217;ai eut un peu de mal à l&#8217;installer pour la première fois sous MAC OS. et après avoir fait un petit tour sur le net, je me suis rendu compte qu&#8217;il n y avait pas &#8230; <a href="http://blog.riadbenguella.com/installer-symfony-mac-os-mamp/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A mes débuts sous symfony, j&#8217;ai eut un peu de mal à l&#8217;installer pour la première fois sous MAC OS. et après avoir fait un petit tour sur le net, je me suis rendu compte qu&#8217;il n y avait pas un tutorial bien expliqué pour réaliser cette tâche correctement ( Ceux que j&#8217;ai suivi ne marchait pas dans mon cas ). C&#8217;est pour cette raison je me suis dit qu&#8217;il fallait écrire un article pour permettre aux débutants sur symfony d&#8217;effectuer cette tâche assez rapidement.<span id="more-33"></span></p>
<p>Tout d&#8217;abord, il faut savoir que pour installer Symfony, il existe plusieurs méthodes. Là je vais vous montrer une d&#8217;elle, l&#8217;installation via Pear.</p>
<p><strong>a) Configuration de l&#8217;environnement (MAMP) :</strong></p>
<p>1- Commencer par installer MAMP.</p>
<p>2- Lancer Mamp <em>(Applications/MAMP/MAMP) </em>puis aller &laquo;&nbsp;dans préférences&nbsp;&raquo; : Configurer le dossier dans l&#8217;onglet &laquo;&nbsp;Apache&nbsp;&raquo; comme suit : <em>/Users/<span style="color: #ff0000;">Votre-Pseudo-MAC</span>/Sites</em>. Réinitialiser ensuite les ports Apache et MySql avec les numéros de ports par défaut respectivement <span style="color: #ff0000;">80</span> et <span style="color: #ff0000;">3306 </span>(dans l&#8217;onglet &laquo;&nbsp;Ports&nbsp;&raquo;).</p>
<p align="center"><a href="http://www.mamp.info"><img class="size-full wp-image-50" title="MAMP" src="http://youknowriad.nomade-dz.com/wp-content/uploads/image-1.png" alt="MAMP, Apache PHP et MySQL" width="426" height="345" /></a></p>
<p>3- Maintenant il faut changer la limite mémoire par défaut dans php.ini que vous trouverez dans le dossier <em>/Applications/MAMP/conf/php5/php.ini </em>et changer la valeur de memory_limit à 32 Mo.</p>
<p align="center"><img class="size-full wp-image-51" title="Php.INI" src="http://youknowriad.nomade-dz.com/wp-content/uploads/image-3.png" alt="Limite mémoire" width="500" height="184" /></p>
<p>4- Ensuite on doit indiquer à votre terminal que la bonne version de PHP à utiliser, comme suit :</p>
<p>- Ouvrez le terminal terminal (<em>Applications/Utilitaires/Terminal</em>).</p>
<p align="center"><img class="size-full wp-image-52" title="Terminal" src="http://youknowriad.nomade-dz.com/wp-content/uploads/image-2.png" alt="Terminal MAC OS X" width="500" height="118" /></p>
<p>- Taper la commande suivante (Ouvrir bash_profile, pour ajouter une variable d&#8217;environnement)</p>
<p><code>$ sudo vim .bash_profile</code></p>
<p>entrer votre mot de passe root si nécéssaire.</p>
<p>- Insérer ensuite cette ligne à la fin du fichier (pour entre en mode insertion taper &laquo;&nbsp;i&nbsp;&raquo;</p>
<p><code>PATH=/Applications/MAMP/bin/php5/bin:$PATH export PATH</code></p>
<p>- sauvegarder les modifs &laquo;&nbsp;:wq&nbsp;&raquo;</p>
<p><strong>b) Installation de Symfony :</strong></p>
<p>1- Vous êtes donc prêts à installer Symfony, redémarer votre terminal puis taper la commande suivante pour initialiser le channel de téléchargement Pear :</p>
<p><code>$ pear channel-discover pear.symfony-project.com</code></p>
<p>2- Vous pouvez maintenant lancer l&#8217;installation comme suit:</p>
<p><code>$ pear install symfony/symfony<br />
$ pear install --alldeps http://phing.info/pear/phing-current.tgz</code></p>
<p>3- Tapez &laquo;&nbsp;symfony&nbsp;&raquo; dans votre terminal pour vérifier que tout s&#8217;est bien passé, vous verrez normalement la liste de toutes les commandes de Symfony.</p>
<p>et naturellement pour finir, je vous faire l&#8217;équivalent du &laquo;&nbsp;HelloWorld&nbsp;&raquo; pour symfony (càd un projet vierge).</p>
<p><strong>c) Création et Configuration d&#8217;un nouveau projet :</strong></p>
<p>1- Aller dans le dossier <em>/Users/<span style="color: #ff0000;">Votre-Pseudo-Mac</span>/Sites</em> et créer un dossier pour votre projet (ça sera &laquo;&nbsp;<em>MonProjet</em>&nbsp;&raquo; pour le tutorial)</p>
<p>2-Vous devez ensuite créer un VirtualHost pour votre projet (ce n&#8217;est pas obligatoire dans une installation locale de Symfony, mais c&#8217;est conseillé pour bénéficier des modules et styles par défaut de symfony) et ceci comme suit :</p>
<p>- Ouvrez le fichier /Application/MAMP/conf/Apache/htpd.conf et ajouter ceci à la fin du fichier :</p>
<p><code>&lt;VirtualHost *&gt;<br />
ServerName <span style="color: #ffff00;">monprojet</span>.Localhost.com<br />
DocumentRoot "/Users/<span style="color: #ffff00;">votre-pseudo-mac</span>/Sites/<span style="color: #ffff00;">MonProjet</span>/web"<br />
DirectoryIndex index.php<br />
Alias /sf /Applications/MAMP/bin/php5/lib/php/data/symfony/web/sf<br />
&lt;Directory "/Applications/MAMP/bin/php5/lib/php/data/symfony/web/sf"&gt;<br />
AllowOverride All<br />
Allow from All<br />
&lt;/Directory&gt;<br />
&lt;Directory "/Users/<span style="color: #ffff00;">votre-pseudo-mac</span>/Sites/<span style="color: #ffff00;">MonProjet</span>/web"&gt;<br />
AllowOverride All<br />
Allow from All<br />
&lt;/Directory&gt;<br />
&lt;/VirtualHost&gt;</code></p>
<p>Il reste à ajouter au fichier etc/hosts la ligne suivante :</p>
<p><code>127.0.0.1      MonProjet.localhost.com</code></p>
<p>Puisque c&#8217;est un fichier caché, vous devez le faire grâce au terminal :</p>
<p><code>$ cd /etc<br />
$ sudo vim hosts</code></p>
<p>Ensuite insérer la ligne (commande &laquo;&nbsp;i&nbsp;&raquo; pour le mode d&#8217;insertion puis sauvegarder &laquo;&nbsp;:wq!&nbsp;&raquo;)</p>
<p>3- Passons maintenant à &laquo;&nbsp;Symfony&nbsp;&raquo; proprement dit. Ouvrez le terminal (ou redémarrez le s&#8217;il est ouvert) et tapez la commande suivante :</p>
<p><code>$ cd Sites/MonProjet</code></p>
<p>3- Initialiser le projet Symfony, comme suit :</p>
<p><code>$ symfony generate:project MonProjet</code></p>
<p>4- Initialiser l&#8217;application Symfony, comme suit :</p>
<p><code>$ symfony generate:app frontend</code></p>
<p>Voila vous avez terminé, vous pouvez maintenant tester votre projet en accèdant à l&#8217;adresse <em>MonProjet.localhost.com</em> depuis votre navigateur.</p>
<p>Bon courage à tous.</p>
<p>PS: n&#8217;oubliez pas de changer <span style="color: #ff0000;">mon-pseudo-mac</span> et <span style="color: #ff0000;">MonProjet</span> avec vos propres informations.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.riadbenguella.com/installer-symfony-mac-os-mamp/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
	</channel>
</rss>

