<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom">
	<title>planete php fr</title>
	
	<updated>2012-05-28T19:50:54+02:00</updated>
	<author>
		<name>Perrick Penet / AFUP</name>
		<email>planetephpfr@afup.org</email>
		<uri>http://planete-php.fr/</uri>
	</author>
	<id>http://planete-php.fr/</id>
	 
	<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/planetephpfr" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="planetephpfr" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
		<title>XcallGraph</title>
		<link href="http://www.nexen.net/actualites/php/20774-xcallgraph.php" />
		<id>http://www.nexen.net/actualites/php/20774-xcallgraph.php</id>
		<updated>2012-05-28T04:04:21+02:00</updated>
		<summary type="html"> 
					 
				      
XcallGraph est un outil graphique en PHP, et qui vous permet de visualiser les fichiers d'analyse dans un format Callgrind, g�n�r�s par Xdebug profiler. 
Ce projet permet de mieux analyser les diff�rents r�sultats, mais sous une forme graphique 
Vous pouvez consulter la documentation en ligne et le t�l�charger pour effectuer des analyses pertinentes.   � SIte xcallgraph  (0 visite)   </summary>
	</entry>
	 
	<entry>
		<title>Http 2.0</title>
		<link href="http://www.nexen.net/actualites/php/20773-http_2.0.php" />
		<id>http://www.nexen.net/actualites/php/20773-http_2.0.php</id>
		<updated>2012-05-27T03:45:05+02:00</updated>
		<summary type="html"> 
					 
				      
Depuis l'apparition du HTTP, celui-ci a pris plus de place sur le web et depuis la version 2, ce protocole peut-�tre utiliser un peu partout. 
Le site 'linuxfr' a publi� un article parlant des points suivants�:  
  
Histoire  
HTTPbis  
Questions � Willy Tarreau  
 
L'article est tr�s complet car de nombreux points sont expliqu�s en d�tails, et cela peut vous servir dans vos projets PHP.   � En route pour HTTP 2.0  (0 visite)   </summary>
	</entry>
	 
	<entry>
		<title>74ème des chroniques jQuery</title>
		<link href="http://feedproxy.google.com/~r/Mathieurobincom/~3/E9j--RT3xNQ/" />
		<id>http://feedproxy.google.com/~r/Mathieurobincom/~3/E9j--RT3xNQ/</id>
		<updated>2012-05-28T16:45:16+02:00</updated>
		<summary type="html"> Pas bien grande activité ces derniers jours du côté de jQuery, c&amp;#8217;est normal avec le retour du beau temps ceci dit. 
 Je commence par  une réponse fournie par un développeur à un autre  et qui explique très bien le pourquoi du pattern utilisé dans la construction de jQuery. Ce pattern qui permet le chaînage qui a fait sa réputation. 
 Pour rappel, la grande majorité des méthodes de jQuery renvoie l&amp;#8217;objet jQuery lui-même. Tout ça notamment pour des raisons de performance. Au lieu de devoir reparser le DOM à chaque manipulation, vous avez déjà la référence renvoyée par le premier sélecteur autant la mettre en cache et quitte à appliquer plusieurs traitements, autant tout mettre sur une seule chaîne d&amp;#8217;instructions plutôt que de créer de nouveaux branchements à chaque nouvelle ligne d&amp;#8217;instructions. L&amp;#8217;explication en anglais est plus complète et pertinente mais dans l&amp;#8217;idée, c&amp;#8217;est ça. 
 Un nouveau framework de widgets graphiques a également vu le jour. Nommé  Chico UI , je n&amp;#8217;en suis pas un grand fan mais je dois admettre qu&amp;#8217;ils ont déjà un joli paquets de widgets. A tester. 
 Je suis tombé sur un cours pour débutant sur jQuery dans un .doc que vous pouvez télécharger légalement et gratuitement  ici . C&amp;#8217;est pas le meilleurs cours que j&amp;#8217;ai lu mais pourquoi pas, c&amp;#8217;est toujours une façon de démarrer. 
 Et voilà c&amp;#8217;es tout pour cette semaine ! On se retrouve bientôt, j&amp;#8217;ai une critique littéraire au planning de la semaine. Il y a du John Resig et du JavaScript dedans    
       
              
  </summary>
	</entry>
	 
	<entry>
		<title>Comment écrire les lignes de commande Symfony plus vite</title>
		<link href="http://www.mon-code.net/article/40/comment-crire-les-lignes-de-commande-symfony-plus-vite" />
		<id>http://www.mon-code.net/article/40/comment-crire-les-lignes-de-commande-symfony-plus-vite</id>
		<updated>2012-05-28T10:55:00+02:00</updated>
		<summary type="html">Quand on developpe avec le framework Symfony (quelque soit la version), on est amené à taper régulièrement des lignes de commandes, dont certaines assez rébarbatives à taper...
J'ai découvert récemment que beaucoup de gens ne savaient pas que l'on pouvait très facilement les simplifier, d'où ce mini article.</summary>
	</entry>
	 
	<entry>
		<title>3 principes applicatifs</title>
		<link href="http://www.nexen.net/actualites/php/20772-3_principes_applicatifs.php" />
		<id>http://www.nexen.net/actualites/php/20772-3_principes_applicatifs.php</id>
		<updated>2012-05-25T04:49:41+02:00</updated>
		<summary type="html"> 
					 
				      
Le site Nettuts propose dans un article, un ensemble de principes que tous les d�veloppeurs ou d�veloppeuses de logiciels en PHP ou autre langages, doivent garder � l'esprit. 
L'article parle de 3 id�es�:  
  
Ne pas r�p�ter  
Bien hi�rarchiser  
Rester simple  
 
Chaque principe poss�de un exemple pour vous comprendre de l'importance de ces id�es.   � 3 Key Software Principles You Must Understand  (0 visite)   </summary>
	</entry>
	 
	<entry>
		<title>Debugguer votre application Magento</title>
		<link href="http://www.nexen.net/actualites/php/20771-debugguer_votre_application_magento.php" />
		<id>http://www.nexen.net/actualites/php/20771-debugguer_votre_application_magento.php</id>
		<updated>2012-05-24T01:26:58+02:00</updated>
		<summary type="html"> 
					 
				      
Magento est une application PHP qui vous permet de r�aliser des boutiques en lignes et aujourd'hui le site PHPBuilder propose quelques outils qui sont int�gr�s dans la plateforme pour d�bugguer vos applications. 
L'article propose 4 outils, qui sont�:  
  
Le mode d�veloppeur  
L'exploitation des logs  
Des conseils chemin du template  
Affichage des requetes SQL  
 
Bien sur l'article signale que vous pouvez aussi utiliser des outils externes comme Firebug ou les caract�ristiques avec Eclipse au niveau de la mise en forme de votre code.   � Debugging Your Magento E-Commerce Applications in PHP  (0 visite)   </summary>
	</entry>
	 
	<entry>
		<title>Notre sponsor Zend annonce sa conférence</title>
		<link href="http://afup.org/pages/site/?route=actualites/562/notre-sponsor-zend-annonce-sa-conference" />
		<id>http://afup.org/pages/site/?route=actualites/562/notre-sponsor-zend-annonce-sa-conference</id>
		<updated>2012-05-25T00:00:00+02:00</updated>
		<summary type="html"> Apr�s de nombreuses collaborations r�ussies avec Zend, NBS System a mis en place une offre d&amp;rsquo;h�bergement sp�cifique qui tire partie de l&amp;rsquo;infrastructure de Cloud priv� de NBS System &amp; des outils Zend et qui permet d&amp;rsquo;obtenir un tr�s haut niveau de service pour les applications PHP, en particulier dans le domaine du e-commerce (Magento, Prestashop, etc.) 
 Lors de cette session, Emile Heitor, CTO de NBS System, vous pr�sentera l&amp;rsquo;architecture technique mise en place et les avantages que cette plateforme apporte pour g�rer les applications, que ce soit du point de vue de l&amp;rsquo;h�bergeur, d&amp;rsquo;un int�grateur web ou du client final. 
 La session se d�roulera le mercredi 6 juin, de 14h45 � 15h30. </summary>
	</entry>
	 
	<entry>
		<title>Invitez votre DSI au Forum PHP 2012 !</title>
		<link href="http://afup.org/pages/site/?route=actualites/559/invitez-votre-dsi-au-forum-php-2012" />
		<id>http://afup.org/pages/site/?route=actualites/559/invitez-votre-dsi-au-forum-php-2012</id>
		<updated>2012-05-25T00:00:00+02:00</updated>
		<summary type="html"> Pour l'inscrire � cette session, �crivez nous � l'adresse� communication@afup.org . Donnez nous votre nom, pr�nom, soci�t�, et le nom de votre DSI.� 
 La table ronde sp�ciale DSI sera anim�e par Yann Serra, et r�unira les responsables techniques de grandes soci�t�s media et institututionnelles. Elle permettra � l'auditoire de comprendre et d�couvrir comment ont travaill� ce qui "ont fait". Elle est �galement l'occasion de discuter et d'�changer autour de PHP et de son application en entreprise.� </summary>
	</entry>
	 
	<entry>
		<title>com_search joomla 2.5 recherche sans accents</title>
		<link href="http://www.pulsar-informatique.com/Blog/Entry/hack-comsearch-joomla-25-recherche-sans-accents.html" />
		<id>http://www.pulsar-informatique.com/Blog/Entry/hack-comsearch-joomla-25-recherche-sans-accents.html</id>
		<updated>2012-05-25T09:42:14+02:00</updated>
		<summary type="html"> Faire une recherche sous joomla avec le composant com_search pose un véritable problème : la recherche ne retourne pas le même nombre de résultat si le mot recherché est avec ou sans accents... après moult recherches sur internet sans trop de succès, j'ai enfin pu résoudre ce problème : 
 ATTENTION : cette méthode est très certainement optimisable (c'est même sur), mais je n'ai pas le temps de le faire moi-même. 
 Alors, il y a 3 choses simples à faire : 
 1-retirer l'appel de la fonction "checkNoHTML" qui pose problème au niveau des accents : je suis sur qu'il suffirait de modifier quelques lignes pour que ce soit pleinement fonctionnel, mais une fois encore, je préfère retirer tout l'appel à la fonction ( de plus, le mot recherché est parsé, et les requêtes sql sont déjà sécurisés, donc il y a déjà une sécurité) 
 OU EST APPELE "checkNoHTML" ? la ou se forme les requêtes sql pour la recherche : 
 Il suffit d'aller dans le répertoire (en partant de la racine du site) 'plugins/search/repertoires-en-fonction-des-composants-installes-sur-le-site'. En effet, si j'ai le composant 'Docman' et 'Jevents' installés sur mon site, par exemple, ET que les plugins de recherches associés à ces composants sont installés, il faudrait que j'aille dans les deux répertoires 'plugins/search/docman/docman.php' et 'plugins/search/eventsearch/eventsearch.php' pour commenter les 2 lignes suivantes : 
 � 
 
 � 
 foreach($row as $key =&gt; $article) {  // if (searchHelper::checkNoHTML($article, $searchText, array('text', 'title', 'metadesc', 'metakey'))) {  $new_row[] = $article;  // }  } 
 � 
 
 Certains plugins de ces composants n'utilisent pas checkNoHTML... dans ce cas, tout va bien :) 
 � 
 2-dans chaque plugin 
 (dans le dossier précédent donc, plugins/search/(docman||eventsearch||content||categories||etc...) 
 mettre une fonction 'suppr_accents' qui supprime les accents du mot que vous rentrez dans la barre de recherche : oui, je sais, je défini la fonction dans chaque plugin, je suis sur et certain qu'on pourrait la définir une seule fois et l'appeler dans chaque plugin, alors que moi, je la définie et je l'utilise dans chaque plugin, mais pareil, je n'ai pas plus de temps à consacrer à ce sujet. 
 � 
 Alors, en règle générale, le fichier situé dans les plugins défini une classe (le plugin 'content/content.php') défini par exemple, la classe 'plgSearchContent' 
 DANS CETTE CLASSE (mais il faudra faire pareil dans tout les autres plugins) définissez la fonction 'suppr_accents' : 
 
  
function suppr_accents($str)  {  $avant = array('À','Á','Â','Ã','Ä','Å','A','A','A','A','?','Æ','?',  'Ç','C','C','C','C','Ð','D','Ð',  'É','È','Ê','Ë','E','E','E','E','E','G','G','G','G',  'H','H','Ì','Í','Î','Ï','I','I','I','I','I','l','l','l','?','l','I','?','J','K','L','L','L','?','L',  'N','N','N','Ñ','Ò','Ó','Ô','Õ','Ö','O','O','O','O','O','Ø','?','?','R','R','R',  'S','S','S','?','T','T','T','U','Ù','Ú','Û','Ü','U','U','U','U','U','U','U','U','U','U','U',  'W','Ý','Y','?','Z','Z','?',  'à','á','â','ã','ä','å','a','a','a','a','?','æ','?','ç','c','c','c','c','d','d',  'è','é','ê','ë','e','e','e','e','e','g','g','g','g','h','h',  'ì','í','î','ï','i','i','i','i','i','i','?','j','k',  'ñ','n','n','n','?','ò','ó','ô','õ','ö','o','o','o','o','o','ø','?','?',  'r','r','r','s','s','s','?','ß','t','t','t',  'ù','ú','û','ü','u','u','u','u','u','u','u','u','u','u','u','u','w','ý','ÿ','y','z','z','?','?','?');  $apres = array('A','A','A','A','A','A','A','A','A','A','A','AE','AE',  'C','C','C','C','C','D','D','D',  'E','E','E','E','E','E','E','E','E','G','G','G','G',  'H','H','I','I','I','I','I','I','I','I','I','I','I','I','I','I','I','IJ','J','K','L','L','L','L','L',  'N','N','N','N','O','O','O','O','O','O','O','O','O','O','O','O','OE','R','R','R',  'S','S','S','S','T','T','T','U','U','U','U','U','U','U','U','U','U','U','U','U','U','U','U',  'W','Y','Y','Y','Z','Z','Z',  'a','a','a','a','a','a','a','a','a','a','a','ae','ae','c','c','c','c','c','d','d',  'e','e','e','e','e','e','e','e','e','g','g','g','g','h','h',  'i','i','i','i','i','i','i','i','i','i','ij','j','k',  'n','n','n','n','n',  'o','o','o','o','o','o','o','o','o','o','o','o','oe',  'r','r','r','s','s','s','s','s','t','t','t',  'u','u','u','u','u','u','u','u','u','u','u','u','u','u','u','u','w','y','y','y','z','z','z','f','s');  return str_replace($avant, $apres, $str);  }
 
  
 et utilisez la dans la méthode 'onContentSearch' au moment ou l'on utilise la variable $text, qui correspond à la chaîne de caractère que vous avez rentrés dans la barre de recherche en faisant ceci : 
 � 
 
  
  
 function onContentSearch($text, $phrase='', $ordering='', $areas=null)  {  $db�� ��� �= JFactory::getDbo();  $app�� �= JFactory::getApplication();  $user�� �= JFactory::getUser();  $groups�� �= implode(',', $user-&gt;getAuthorisedViewLevels());  $tag = JFactory::getLanguage()-&gt;getTag();   require_once JPATH_SITE.'/components/com_content/helpers/route.php';  require_once JPATH_SITE.'/administrator/components/com_search/helpers/search.php';  $text=$this-&gt;suppr_accents($text);//ligne de code rajouté 
 ...blablabla 
 } 
 
  
  
 � 
 certains composants (comme docman) n'utilisent pas de classe, mais juste des fonctions, donc pour docman par exemple, appelez la fonction comme suit : 
 � 
 � 
 
  
$text=suppr_accents($text);  
 � 
 
  
  
 et enfin troisième étape très importante : encodez vos fichiers plugins en utf-8 : moi, j'utilise notepad ++ (comment ca, ca ne fait pas professionnel ? oO ) et pour chaque fichier plugin qu'on a précédemment modifiés, aller dans l'onglet 'encodage', ils sont de base en 'ANSI', et les passer en 'UTF-8 (sans BOM)' 
 � 
 AINSI vos recherches ne sont plus sensibles à la casse, et votre recherche tient la route :) 
 � 
 Voila, en éspèrant que ca vous serve autant qu'à moi, 
 � 
 Cordialement, kaking </summary>
	</entry>
	 
	<entry>
		<title>Forum PHP 2012 oblige, pas d'atelier PHP Orléans en juin !</title>
		<link href="http://afup.org/pages/site/?route=actualites/558/forum-php-2012-oblige-pas-datelier-php-orleans-en-juin" />
		<id>http://afup.org/pages/site/?route=actualites/558/forum-php-2012-oblige-pas-datelier-php-orleans-en-juin</id>
		<updated>2012-05-24T00:00:00+02:00</updated>
		<summary type="html"> D�j� une petite dizaine de personnes sont inscrites � l'ap�ro, sur   le site des aperophp.net . Avec le soleil qui pointe et l'�t� qui approche, la soir�e devrait �tre agr�able !� 
 Alors, Orl�anais, deux occasions en juin pour vous retrouver : soit � l'ap�ro PHP du 14 juin, soit bien s�r au Forum PHP 2012...� </summary>
	</entry>
	 
	<entry>
		<title>Scraper le web avec jQuery et phantomJS</title>
		<link href="http://feedproxy.google.com/~r/sbnet/~3/JLF28rcA60M/" />
		<id>http://feedproxy.google.com/~r/sbnet/~3/JLF28rcA60M/</id>
		<updated>2012-05-24T10:34:58+02:00</updated>
		<summary type="html"> PJScrape est un framework bien pratique et simple à utiliser pour scraper le web. C&amp;#8217;est de la commande en ligne et il faut installer phantomJS, mais au final on a u système de scraping bien puissant et très évolutif.  http://nrabinowitz.github.com/pjscrape/  
  
  
 
                        
  </summary>
	</entry>
	 
	<entry>
		<title>Scraper le web avec jQuery et phantomJS</title>
		<link href="http://feedproxy.google.com/~r/sbnet/~3/JLF28rcA60M/" />
		<id>http://feedproxy.google.com/~r/sbnet/~3/JLF28rcA60M/</id>
		<updated>2012-05-24T10:34:58+02:00</updated>
		<summary type="html"> PJScrape est un framework bien pratique et simple à utiliser pour scraper le web. C&amp;#8217;est de la commande en ligne et il faut installer phantomJS, mais au final on a u système de scraping bien puissant et très évolutif.  http://nrabinowitz.github.com/pjscrape/  
  
  
 
                        
  </summary>
	</entry>
	 
	<entry>
		<title>Scraper le web avec jQuery et phantomJS</title>
		<link href="http://feedproxy.google.com/~r/sbnet/~3/JLF28rcA60M/" />
		<id>http://feedproxy.google.com/~r/sbnet/~3/JLF28rcA60M/</id>
		<updated>2012-05-24T10:34:58+02:00</updated>
		<summary type="html"> PJScrape est un framework bien pratique et simple à utiliser pour scraper le web. C&amp;#8217;est de la commande en ligne et il faut installer phantomJS, mais au final on a u système de scraping bien puissant et très évolutif.  http://nrabinowitz.github.com/pjscrape/  
  
  
 
                        
  </summary>
	</entry>
	 
	<entry>
		<title>Le forum PHP c'est dans 2 semaines!</title>
		<link href="http://www.pulsar-informatique.com/Blog/Entry/le-forum-php-cest-dans-2-semaines.html" />
		<id>http://www.pulsar-informatique.com/Blog/Entry/le-forum-php-cest-dans-2-semaines.html</id>
		<updated>2012-05-24T09:17:14+02:00</updated>
		<summary type="html"> Tous les ans l' AFUP  organise le forum PHP, c'est l'événement phare du monde PHP! 
 Le forum aura lieu cette année  les 5 et 6 juin 2012 , vous pourrez y retrouver les plus grands experts de PHP au monde, des retours d'expérience de grandes entreprises, des partenaires de renom, des sponsors prestigieux...Le programme est  ici , et l'inscription  là . 
 Venez nombreux! 
       </summary>
	</entry>
	 
	<entry>
		<title>Les principales causes d?échec du BDD</title>
		<link href="http://blog.lepine.pro/php/les-principales-causes-dechec-du-bdd" />
		<id>http://blog.lepine.pro/php/les-principales-causes-dechec-du-bdd</id>
		<updated>2012-05-24T07:01:35+02:00</updated>
		<summary type="html">  {lang: 'fr'}   
			  
				  
			 
		 
 Bonjour à tous ! Alors bien évidemment, il serait absurde de vouloir lister toute les erreurs possibles, et totalement illusoire de croire que j&amp;#8217;en n&amp;#8217;en fait plus ; mais je crois pouvoir donner quelques exemples de ce qu&amp;#8217;il faut éviter à tout prix lorsque l&amp;#8217;on fait du développement piloté par le comportement avec Behat. 
 Petit rappel : Behat, c&amp;#8217;est quoi ? En un mot, c&amp;#8217;est un outil qui va vous permettre de pratiquer du BDD (Behavior Driven Development) en PHP. En d&amp;#8217;autres mots, il va vous permettre de tester automatiquement si le développement d&amp;#8217;un produit correspond aux spécifications qu&amp;#8217;en a donné le client. Vous trouverez une  description beaucoup plus complète ici . 
 Bref, c&amp;#8217;est génial, c&amp;#8217;est simple à utiliser&amp;#8230; mais c&amp;#8217;est extrêmement difficile à utiliser correctement. Et c&amp;#8217;est catastrophique si c&amp;#8217;est mal mal utilisé ! Pourquoi ? 
 Behat a deux côtés : un côté fonctionnel (rédacteur), rédigé avec la syntaxe de Gherkin, un côté ��développeur��, en PHP. 
 De ce que je vois, le plus souvent  le fonctionnel  (au choix) : 
 
  ne dispose pas du temps nécessaire  pour se consacrer à la rédaction des tests d&amp;#8217;acceptation (fonctionnalité) 
 n&amp;#8217;a  pas une vision assez clair de son produit  pour pouvoir le découper fonctionnellement 
  confond interface  (ergonomie, disposition&amp;#8230;)  et comportement  de l&amp;#8217;application 
  confond contrôle sur les données et test sur le comportement  (trèèès souvent!) 
 ou, plus rarement, confond socle technique et fonctionnalité 
 
 De ce que je constate,  le développeur  (au choix) : 
 
 est obligé de se substituer au client dans la rédaction des tests, ce qui n&amp;#8217;est  pas son métier  (pas simple donc) 
  n&amp;#8217;arrive pas à s&amp;#8217;abstraire du technique  
  se focalise sur le cheminement  (comment arriver là?) et l&amp;#8217;emplacement dans l&amp;#8217;application 
 a tendance à  écrire du code PHP  plutôt que de réutiliser des étapes existantes 
 
 Bon, le constant est sévère, mais je généralise bien sûr. Cependant il est très difficile d&amp;#8217;échapper à ça. 
 Je passe aux exemples, tirés d&amp;#8217;un code vu ce matin même. 
 Décrire une fonctionnalité : pas si simple 
 Prenons ce bout de fonctionnalité que j&amp;#8217;ai reçu comme spécification : 
 Feature: access to the task's page from a list of tasks
In order to see a task
As a logged in user
I need to open a task

Background:
Given I am logged in user

Scenario Outline:
When I press "Find a task"
And I fill in "Task reference" with "&lt;reference&gt;"
And I press "Search"
Then I should be on "index/task/id/&lt;id&gt;"

Examples:
| reference   | id  |
| task1       | 1   |
| task2       | 2   | 
 Bon, ça marche. Mais quand on y regarde plus près : 
 
 on se consacre plus aux étapes permettant d&amp;#8217;accéder aux conditions du scénario qu&amp;#8217;au scénario lui-même 
 si la structure de la page change, le test est obsolète 
 on ne teste pas le comportement, mais la donnée. Si la donnée change, le test est obsolète 
 si l&amp;#8217;url change (rewriting, etc), le test est obsolète 
 
 Bref,  le test va rapidement devenir obsolète.  
 Il est difficile dans ce cas de voir comment s&amp;#8217;abstraire des données (liaison id et task). Après réflexion, on peut suggérer d&amp;#8217;évoluer vers ceci : 
 Feature: access to the task's page from a list of tasks
In order to see a task
As a logged in user
I need to open an task's page from a list

Background:
Given I am logged in user

Scenario Outline:
Given I see a list of tasks, including the task "&lt;reference&gt;"
When I follow "&lt;reference&gt;"
Then I should be on the Task's page
And I should see the task "&lt;reference&gt;"

Examples:
| reference  |
| task1      |
| task2      | 
 On a donc opéré des modifications afin de rendre le test indépendant du jeu de données ou de l&amp;#8217;interface de l&amp;#8217;application. 
 Ce que je dis souvent, c&amp;#8217;est que, en théorie, un test de comportement est valide quelque soit le support :  que l&amp;#8217;on passe d&amp;#8217;un site web à une application mobile, le changement de support ne change pas la fonctionnalité ou les scénarios !  Ca ne change que leur implémentation. 
 On pourra certainement trouver encore à redire, mais la fonctionnalité, telle qu&amp;#8217;elle est décrite, est désormais valable quelque soit son implémentation technique. Seul son comportement est ici spécifié. Elle a donc une forte probabilité d&amp;#8217;être viable et pertinente dans le temps. 
 Implémenter une définition de fonctionnalité : pas plus facile 
 On a vu un exemple de fonctionnalité à risque. Passons de l&amp;#8217;autre côté et mettons-nous du point de vue du développeur. De la même façon, voici une implémentation possible : 
 Note : en l?occurrence, la liste des tâches n&amp;#8217;est possible dans l&amp;#8217;application qu&amp;#8217;après  avoir effectué une recherche. 
 /**
 * @Given /^I see a list of tasks, including the task "([^"]*)"$/
 */
public function iSeeAListOfTasksIncludingTheTask($reference)
{
    $session = $this-&gt;getMainContext()-&gt;getSubcontext('mink')-&gt;getSession();
    $page = $session-&gt;getPage();

    $session-&gt;visit('/task');

    // Find the task in the search engine
    $page-&gt;find('css', '.ipt-task-search')-&gt;setValue($reference);
    $page-&gt;find('css', '.button-search')-&gt;press();

    if ($session-&gt;getCurrentUrl() != "/task/{$reference}") {
        throw new AssertException("We cannot find the task {$reference} with the search engine");
    }
} 
 On constate différente choses : 
 
 Que de code ! C&amp;#8217;est long à écrire 
 Que de code ! Et pas réutilisable en plus ! 
 Que de code ! Et qu&amp;#8217;est-ce qui se passe si l&amp;#8217;interface HTML change ? 
 On ne comprend pas ce qui se passe au premier coup d&amp;#8217;oeil 
 
 L&amp;#8217;implémentation fonctionne, mais est peu viable dans le temps, et surtout on a perdu du temps pour l&amp;#8217;écrire (c&amp;#8217;est fastidieux de devoir manipuler le navigateur à la main). 
 Là où Behat est fort, c&amp;#8217;est qu&amp;#8217;il nous permet, en PHP, de faire comme si on écrivait des étapes de scénario ��à la main��. Ca fait gagner un temps monstre et permet de réutiliser les définitions existantes : 
 
/**
* @Given /^I see a list of tasks, including the task "([^"]*)"$/
*/
public function iSeeAListOfTasksIncludingTheTask($reference) {
    return array(
        new Given('I am on "/"')
        , new When(sprintf('I fill "Task reference" with "%s"', $reference))
        , new When('I press "Search"')
    );
} 
 Pour s&amp;#8217;aider, le développeur peut s&amp;#8217;appuyer (si tout se passe bien) sur la personne qui a rédigé le scénario, qui l&amp;#8217;aidera à découper sa définition en différentes étapes. 
 Attention, contrairement au scénario Gherkin, ce code peut être amené parfois à évoluer. Par  exemple, si on ajoute un scénario pour la recherche de tâche, avec cette étape : 
 When I search the task "" 
 On pourra dès lors écrire : 
 /**
* @Given /^I search the task "([^"]*)"$/
*/
public function iSearchTheTask($reference) {
    return array(
        new Given('I am on "/"')
        , new When(sprintf('I fill "Task reference" with "%s"', $reference))
        , new When('I press "Search"')
    );
}

/**
* @Given /^I see a list of tasks, including the task "([^"]*)"$/
*/
public function iSeeAListOfTasksIncludingTheTask($reference) {
    return array(
        new When(sprintf('I search the task "%s"', $reference))
    );
} 
 Le développeur peut donc, sans architecture ou code complexe, mais simplement en utilisant les objets Etapes fournis par Behat, organiser ses définitions de façon à les rendre réutilisables. 
 Le mot de la fin 
 Bref, ça semble évident, mais quand on fait du BDD&amp;#8230; et bien il faut se focaliser le le Comportement. Ce n&amp;#8217;est pas facile, et contre intuitif pour beaucoup de monde. Toutefois, le rédacteur du test peut s&amp;#8217;aider de la structure de la fonctionnalité (comment la décrire, qui y participe, quels en sont les bénéfices, puis quels cas d&amp;#8217;utilisation je peux en donner). 
 En d&amp;#8217;autres mots, le ��rédacteur�� ne doit pas s&amp;#8217;appuyer sur ce qu&amp;#8217;il connaît de son application (emplacement, design&amp;#8230;), mais sur la vision du produit (comment ça se passe ? Avec quel gain pour l&amp;#8217;utilisateur ?). En clair : 
  Le rédacteur ne doit pas s&amp;#8217;appuyer sur ce qu&amp;#8217;il connaît de son application mais sur la vision du produit  
 Le développeur, lui, doit prendre l&amp;#8217;habitude de ne pas se lancer tête baissée dans le code, au risque de consacrer trop de temps et d&amp;#8217;énergie à l&amp;#8217;utilisation de Behat. Certes il doit écrire ce code, mais il ne code plus pour interagir avec un autre code (comme lorsqu&amp;#8217;il le fait pour un test unitaire par exemple), mais pour interagir avec un produit. En clair : 
  Le développeur n&amp;#8217;interagit plus avec du code mais avec un produit  
 Ceci dit, félicitations d&amp;#8217;avoir lu ce billet jusqu&amp;#8217;au bout    . 
 Je ne prétend pas avoir le recul suffisant, mais je crois que ces constats s&amp;#8217;appliquent généralement. C&amp;#8217;est le cas pour vous aussi ? Vous avez vu d&amp;#8217;autres écueils courants ? Ou au contraire, pour vous tout a roulé tout de suite ? 
</summary>
	</entry>
	 
	<entry>
		<title>Soirée PHP exceptionnelle à Bordeaux le 4 Juin</title>
		<link href="http://www.romainbourdon.com/index.php/2012/05/23/soiree-php-exceptionnelle-a-bordeaux-le-4-juin/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=soiree-php-exceptionnelle-a-bordeaux-le-4-juin" />
		<id>http://www.romainbourdon.com/index.php/2012/05/23/soiree-php-exceptionnelle-a-bordeaux-le-4-juin/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=soiree-php-exceptionnelle-a-bordeaux-le-4-juin</id>
		<updated>2012-05-23T23:50:30+02:00</updated>
		<summary type="html"> A l&amp;#8217;occasion du Forum PHP 2012,  EPITECH Bordeaux  et le  Php User Group de Bordeaux  s&amp;#8217;associent pour vous proposer une soirée exceptionnelle de conférences gratuites le lundi 4 Juin à partir du 18h00. 
 IMPORTANT : Entrée gratuite sur inscription :  http://www.eventbrite.fr/event/3605729835  
 Au programme : 
 
  Eric COLINET &amp;#8211; Industrialisation PHP chez Orange  
 Le nombre d&amp;#8217;applications d&amp;#8217;importance écrites en PHP n&amp;#8217;a cessé d&amp;#8217;augmenter au sein de chez Orange (plus de 600). Aujourd&amp;#8217;hui des entités internes de développement sont dédiées au développement de projets PHP, le groupe a donc dû s&amp;#8217;adapter et mettre en place des procédures d&amp;#8217;industrialisation prenant en compte l&amp;#8217;historique de cette filière issue d&amp;#8217;applications développées sur un coin de table. 
 Dans cette présentation nous verrons ce que le Centre de Compétences PHP apporte à l&amp;#8217;industrialisation de cette filière afin de garantir un bon niveau de qualité et de performance dans un contexte humain et technique complexe et varié. 
 Nous verrons les divers problèmes rencontrés lors de l&amp;#8217;adaptation des pratiques et habitudes de chacun afin que ce cheminement se passe dans les meilleures conditions. 
 
  Rasmus LERDORF &amp;#8211; état de l&amp;#8217;art de PHP en 2012  
 Rasmus Lerdorf, créateur de la plateforme  PHP, dressera l?  « Etat de l?art de PHP en 2012 » à la veille du forum PHP organisé par l?AFUP à Paris. 
 Cette conférence en anglais sera retransmise en direct depuis Paris dans le grand amphi d&amp;#8217;Epitech Bordeaux. 
 Ces deux conférences seront suivis d&amp;#8217;un cocktail permettant d&amp;#8217;échanger entre professionnels du secteur dans le cadre agréable du campus technologique d&amp;#8217;Epitech Bordeaux. 
 IMPORTANT : Entrée gratuite sur inscription :  http://www.eventbrite.fr/event/3605729835  
</summary>
	</entry>
	 
	<entry>
		<title>Soirée PHP exceptionnelle à Bordeaux le 4 Juin</title>
		<link href="http://www.romainbourdon.com/index.php/2012/05/23/soiree-php-exceptionnelle-a-bordeaux-le-4-juin/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=soiree-php-exceptionnelle-a-bordeaux-le-4-juin" />
		<id>http://www.romainbourdon.com/index.php/2012/05/23/soiree-php-exceptionnelle-a-bordeaux-le-4-juin/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=soiree-php-exceptionnelle-a-bordeaux-le-4-juin</id>
		<updated>2012-05-23T23:50:30+02:00</updated>
		<summary type="html"> A l&amp;#8217;occasion du Forum PHP 2012,  EPITECH Bordeaux  et le  Php User Group de Bordeaux  s&amp;#8217;associent pour vous proposer une soirée exceptionnelle de conférences gratuites le lundi 4 Juin à partir du 18h00. 
 IMPORTANT : Entrée gratuite sur inscription :  http://www.eventbrite.fr/event/3605729835  
 Au programme : 
 
  Eric COLINET &amp;#8211; Industrialisation PHP chez Orange  
 Le nombre d&amp;#8217;applications d&amp;#8217;importance écrites en PHP n&amp;#8217;a cessé d&amp;#8217;augmenter au sein de chez Orange (plus de 600). Aujourd&amp;#8217;hui des entités internes de développement sont dédiées au développement de projets PHP, le groupe a donc dû s&amp;#8217;adapter et mettre en place des procédures d&amp;#8217;industrialisation prenant en compte l&amp;#8217;historique de cette filière issue d&amp;#8217;applications développées sur un coin de table. 
 Dans cette présentation nous verrons ce que le Centre de Compétences PHP apporte à l&amp;#8217;industrialisation de cette filière afin de garantir un bon niveau de qualité et de performance dans un contexte humain et technique complexe et varié. 
 Nous verrons les divers problèmes rencontrés lors de l&amp;#8217;adaptation des pratiques et habitudes de chacun afin que ce cheminement se passe dans les meilleures conditions. 
 
  Rasmus LERDORF &amp;#8211; état de l&amp;#8217;art de PHP en 2012  
 Rasmus Lerdorf, créateur de la plateforme  PHP, dressera l?  « Etat de l?art de PHP en 2012 » à la veille du forum PHP organisé par l?AFUP à Paris. 
 Cette conférence en anglais sera retransmise en direct depuis Paris dans le grand amphi d&amp;#8217;Epitech Bordeaux. 
 Ces deux conférences seront suivis d&amp;#8217;un cocktail permettant d&amp;#8217;échanger entre professionnels du secteur dans le cadre agréable du campus technologique d&amp;#8217;Epitech Bordeaux. 
 IMPORTANT : Entrée gratuite sur inscription :  http://www.eventbrite.fr/event/3605729835  
</summary>
	</entry>
	 
	<entry>
		<title>Soirée PHP exceptionnelle à Bordeaux le 4 Juin</title>
		<link href="http://bordeauxpug.org/2012/05/23/soiree-php-exceptionnelle-a-bordeaux-le-4-juin/" />
		<id>http://bordeauxpug.org/2012/05/23/soiree-php-exceptionnelle-a-bordeaux-le-4-juin/</id>
		<updated>2012-05-23T23:53:59+02:00</updated>
		<summary type="html">
</summary>
	</entry>
	 
	<entry>
		<title>Yann Serra animera la table ronde DSI du Forum PHP 2012</title>
		<link href="http://afup.org/pages/site/?route=actualites/556/yann-serra-animera-la-table-ronde-dsi-du-forum-php-2012" />
		<id>http://afup.org/pages/site/?route=actualites/556/yann-serra-animera-la-table-ronde-dsi-du-forum-php-2012</id>
		<updated>2012-05-23T00:00:00+02:00</updated>
		<summary type="html"> Yann Serra est bien connu des lecteurs des magazines IT : il est en effet l'un des journalistes sp�cialis�s les plus reconnus et les plus pointus dans son domaine.� 
 Lors de cette table ronde, les responsables techniques invit�s pourront�apporter leur �clairage,��changer autour de leurs exp�riences acquises au sein d'entreprises publiques comme priv�es, et r�pondre aux questions que Yann Serra ne manquera pas de leur poser. 
 grand projet PHP et les avantages escompt�s. 
 Les DSI dans le public pourront aller � la rencontre de ceux qui � ont fait � et ainsi mieux appr�hender un�grand projet PHP et les avantages escompt�s. R�servez d�s maintenant votre place pour assister � cette table ronde incontournable ! </summary>
	</entry>
	 
	<entry>
		<title>Forum PHP 2012 : y serez-vous ?</title>
		<link href="http://onpk.net/index.php/2012/05/23/551-forum-php-2012-y-serez-vous" />
		<id>http://onpk.net/index.php/2012/05/23/551-forum-php-2012-y-serez-vous</id>
		<updated>2012-05-23T16:01:18+02:00</updated>
		<summary type="html">  Une fois n'est pas coutume, je ne serai pas présent au prochain Forum PHP à Paris organisé par le nouveau bureau de l'AFUP. C'est probablement la première fois que ça m'arrive depuis 2006 ! Heureusement le reste de l'équipe  No Parking  y sera au grand complet. Avec un programme toujours aussi alléchant fait d'anciens (Rasmus Lerdorf, Damien Seguy, Jean-Marc Fontaine), de valeurs sûres (Gérald Croes, Jérôme Renard, Enrico Zimuel) et de nouveaux (LB Denker, Amaury Bouchard, Bastien Jaillot, Simon Perdrisat) j'ai un petit pincement au coeur.... Je compte donc sur vous pour en faire un bel évènement et me le faire regretter à vie ;-) 
     </summary>
	</entry>
	</feed>

