mardi 24 août 2010

Eclipse + Yii : mise en place d'un environnement de développement


1. Eclipse IDE

Télécharger la dernière version d'Eclipse - Choisir la distribution Eclipse for PHP Developers. Dans mon cas il s'agira donc de la version windows 32 bits (eclipse-php-helios-win32.zip - 143.5 Mo - version 3.6).
Une fois le téléchargement terminé, l'installation d'Eclipse consiste simplement à décompression du fichier Zip. Nous allons donc créer le répertoire c:\ide et y décompresser l'archive.
Voilà, Eclipse est installé, il se trouve dans le répertoire c:\ide\eclipse Pour le lancer, il suffit d'éxécuter :
> c:\ide\eclipse\eclipse.exe
Lors du premier lancement d'Eclipse, vous devez choisir un répertoire qui sera utilisé comme 'espace de travail' (en anglais, workspace). Dans cet exemple j'ai choisi de créer un répertoire c:\project pour cela. Tous les projets qui seront ensuite créés depuis Eclipse dans cet espace de travail, le seront donc dans ce répertoire.
L'objet de cet article n'étant pas l'apprentissage de l'utilisation d'Eclipse, je vous laisse découvrir les fonctions disponibles par vous même, pour me concentrer sur le développement PHP.

2. Les Plugins Eclipse

Cette version comporte déjà un certain nombre de fonctionnalités qu'il va nous falloir configurer. Par ailleurs, vous pouvez installer vos plugins favoris pour palier aux manques que vous constaterez. Personnellement, je me suis contenté de rajouter les plugins suivants :
  • Subclipse : la version compatible avec Eclipse 3.6 est la 1.6.x (installation)
  • RSE (Remote System Explorer) : cette fonction permet d'accèder à des sytèmes externes par FTP, sftp/ssh etc ... En gros, sans quitter Eclipse vous pourrez naviguer sur votre serveur Web par FTP. RSE fait partie de la version d'Eclipse que nous venons d'installer, mais il ne prend pas en charge les protocoles qui nous intéressent (FTP, sftp/ssh), on va donc télécharger ce plugin et l'installer (cette fois à la main, pas de lien direct depuis Eclipse).
Concernant l'installation des plugins Eclipse, je suis tombé par hasard sur une méthode qui m'a semblé bien astucieuse et pratique : les fichiers link
Le principe est simple :

  • créer le répetoire c:\ide\eclipse-plugins où tous les plugins seront stockés
  • télécharger le plugin a installer (par exemple RSE - fichier : RSE-runtime-3.2.zip)
  • créer le répertoire c:\ide\eclipse-plugin\RSE-3.2 et y décompresser RSE-runtime-3.2.zip.
  • créer le répertoire c:\ide\eclipse\links
  • créer le fichier c:\ide\eclipse\links\mes_plugins.link (le nom importe peu, mais l'extension doit être .link)
  • ouvrir le fichier link et y ajouter la ligne suivante : path=C:/ide/eclipse-plugins/RSE-3.2
  • sauver et fermer
Ensuite on relance Eclipse et Ô magie ! .. le Remote System Explorer nous propose les protocoles FTP, sftp/ssh etc ... Cette façon d'installer des plugins est décrite en détail dans cet article (en anglais). Les avantages de cette méthode sont multiples :
  1. la désinstallation d'un plugin est simple : supprimez le fichier link, ou la référence au plugin dans un fichier link comportant plusieurs références. (amusez-vous à enlever un plugin installé directement dans Eclipse, vous comprendrez)
  2. Plusieurs version d'Eclipse peuvent utiliser les mêmes plugins immédiatement
  3. la gestion de version de plugins est simplifiée.


Bon, revenons à nos moutons. Nous avons donc Eclipse prêt à l'emploi et l'arborescence ci-dessus.Il est temps d'installer Yii.

3. Yii Framework

J'ai choisi de placer Yii dans le répertoire c:\project\lib, mais vous faites comme vous voulez. Après avoir téléchargé la dernière version de Yii (à ce jour, il s'agit de la yii-1.1.3), décompressez-la dans le répertoire c:\project\lib. Vous obtenez alors les répertoires suivants :


  • C:\project\lib\php\yii-1.1.3.r2247 : racine de l'installation
  • C:\project\lib\php\yii-1.1.3.r2247\demos : sites de démonstration (blog, hangman - jeu du pendu-, helloworld, phonebook -demo SOAP -)
  • C:\project\lib\php\yii-1.1.3.r2247\framework : classes composant le noyau (core) de Yii
  • C:\project\lib\php\yii-1.1.3.r2247\requirements : vérifications des pré-requis
Lorsqu'une nouvelle version de Yii sera disponible, il suffira de la copier elle aussi dans le répertoire c:\project\lib\php, ce qui nous permettra facilement de passer d'une version à l'autre.

4. Apache

L'installation d'Apache (WampServer) et d'un environnement complet de tests est détaillée dans cet article.
Notre espace de travail se trouve dans C:\project, c'est là que nos projets Yii seront créés. C'est donc là que se trouveront nos fichiers PHP et par conséquent, notre serveur Web (Apache) doit pouvoir servir des fichiers placés dans ce répertoire. Pour cela, il est pratique de créer un alias qui va pointer vers le répertoire c:\projects. WampServer permet cela très facilement directement depuis le menu utilisateur (Apache > Alias Directories > + Add an alias ). Notre alias va s'appeler 'project' et il pointera vers le répertoire c:\project.
Une fois l'opération terminée (WampServer se relance automatiquement une fois l'Alias créé), allons faire un tour à l'adresse suivante :

La page qui s'affiche est générée par Yii. Elle résume l'état de l'installation en terme d'extensions PHP disponibles ainsi que de la version du language (PHP 5.1 ou supérieur).

5. Intégration Yii - Eclipse

Avant de pouvoir créer notre premier projet Yii dans Eclipse et bénéficier d'un environnement de développement complet, il reste quelques petites configurations à faire.

Création d'un serveur PHP
Par défaut, Eclipse utilise l'adresse http://localhost pour éxécuter les fichiers PHP que nous allons créer dans nos projets, mais cela ne correspond pas à notre environnement. En effet, dans l'étape précédente, nous avons créé un alias qui pointe directement sur notre répertoire de projet. Eclipse devrait donc plutôt utiliser l'adresse http://localhost/project. Ajoutons donc un serveur PHP :
  • Windows > Preferences > PHP > PHP Servers + [New] - on va l'appeler 'Project PHP Web Server' et lui donner l'URL http://localhost/project. Après l'avoir rajouté, nous le définirons comme serveur par défaut.
Client PHP
Nous allons maintenant indiquer à Eclipse où se trouve l'interpréteur PHP qu'il devra utiliser pour par exemple, la détection à la volée des erreurs de syntaxes. Nous utiliserons PHP 5.2.11 que nous avions installé lors d'un précédent article.
  • Windows > Preferences > PHP > PHP Executables + [Add...]
  • Name : PHP 5.2.11
  • Executable Path : C:\wamp\bin\php\php5.2.11\php.exe
  • PHP ini file (optional) : (laisser vide. On utilisera le php.ini par défaut)
  • SAPI Type : CLI
  • PHP Debugger : XDebug (cela seulement si XDebug a été installé - encore une fois, cette partie a été détaillée dans un article précédent)
  • [Finish]
Librairies Yii
Pour terminer, nous allons informer Eclipse que le framework Yii doit être accessible en tant que librairie utilisateur lors de la création d'un nouveau projet.
  • Windows > Preferences > PHP > PHP Libraries + [New...]
  • User library name : Yii 1.1.3
  • [OK]
  • sélectionnez ensuite 'Yii 1.1.3' dans la liste 'defined user libraries' et cliquez sur [Add External Folder...]
  • Séelctionnez ensuite le répertoire C:\project\lib\php\yii-1.1.3.r2247\framework
  • [OK]
  • [OK] (ferme la fenêtre de préférences
Debug
Pour être complet, notre environnement doit également permettre le débugage de nos applications PHP (notre environnement de test est celui qui a été installé lors d'un article précédent). La seule petite chose que nous devons modifier est le numéro de port utilisé par XDebug. Par défaut, XDebug s'installe sur le port 10000, mais Eclipse utilise le port 9000 ... si on ne fait rien, c'est pas demain que ces deux là vont pouvoir communiquer !
  • Windows > Preferences > PHP > Debug > Installed Debuggers
  • Sélectionnez XDebug
  • [Configure]
  • Debug Port : 10000
  • [OK]
Par sécurité vous pouvez également modifier le port de Zend Debugger en le mettant à 10001 par exemple. En résumé, le port de XDebug configuré ici doit être le même que celui configuré dans le fichier C:\wamp\bin\apache\Apache2.2.11\bin\php.ini par le paramètre xdebug.remote_port.

5. HelloWorld

Ca y est, c'est l'heure de créer notre premier projet Eclipse !! ... quel suspens ! Allé, c'est parti :
  • File > New ... > PHP Project
  • Project Name : helloWorld
  • [Next > ]
  • Sélectionnez l'onglet Libraries puis cliquez sur [Add Library ...]
  • Sélectionnez 'User Library' puis cliquez sur [Next >]
  • .. et là, on retrouve la librairie que nous avions rajouté à Eclipse. Cochez donc Yii 1.1.3
  • [Finish]
  • [Finish] pour ferme l'assistant de création de projet
Si ce n'est pas déjà fait, passez en perspective PHP pour voir apparaître votre projet helloWorld dans le panneau 'PHP Explorer'.
Le projet helloWorld sélectionné, cliquez sur le bouton droit de la souris pour obtenir le menu contextuel, puis choisissez 'New ... > PHP File'. Notre premier fichier s'appellera index.php (c'est original).

Ok, c'est tout pourri comme programme, mais le but étant de tester un peu l'installation que l'on vient de terminer, ça fera l'affaire. Exécutons ce superbe bout de code:
  • Sélectionnez le fichier index.php + bouton droit de la souris
  • Run as > PHP Web Page
Le navigateur Interne d'Eclipse apparaît et affiche le résultat de notre script. Tentons le débugage maintenant.
  • Sélectionnez le fichier index.php + bouton droit de la souris
  • Debug as > PHP Web Page
La Perspective dédié au debugage PHP apparaît (si vous l'autorisez) et le script est bloqué sur la première ligne du script : tout fonctionne correctement !!

6. Conclusion

Voilà, nous venons d'installer tout un environnement de développement pour PHP et Yii. Je vous laisse explorer par vous même les nombreuses fonctionnalités offertes par Eclipse (la saisie assistée vous permettra notamment d'accéder rapidement aux Méthode fournies par les classes Yii). Bien sûr cet environnement peut être amélioré par des plugins Eclipses, des raccourcis claviers, des modèles tout prêt, des outils extenres, etc ... mais cela est une autre histoire... et peut être un autre article.

samedi 27 mars 2010

Yii : création d'un environnement de test




Bon, on va essayer de mettre en place un petit environnement de test autour de la dernière version du framework Yii. Comme l'indique la documentation, des tests unitaires et fonctionnels peuvent s'intégrer facilement à Yii. Voyons voir si c'est vrai ! Est-il facile d'installer PHPUnit et Selenium sur Wamp ? A vrai dire j'ai déjà vu plus simple, et le temps passé à faire fonctionner les différents modules m'a incité à écrire ce post afin de me souvenir de la marche à suivre, et éventuellement d'éviter au lecteur les heures de galères que peut rencontrer un novice qui se lance dans l'aventure du test.

1. Environnement

Avant de commencer, un petit aperçu de l'existant :
  • wampServer : pour le server HTTP ( WampServer 2.0i [11/07/09]) - il est installé dans le répertoire c:\wamp
  • Yii Framework 1.1.3 : dernière version (Juillet 2010) du framework
  • windows XSP sp3
Avant d'aller plus loin, j'ai mis à jour la version de php livrée avec WampServer 2.0i, la 5.3.0. En effet, mon hébergeur utilisant la version 5.2.13 je vais donc télécharger cette version et l'installer dans WampServer. Hélas, pas de 5.2.13 disponible chez WampServer ! Tant pis, je prendrais la 5.2.11. L'installation est automatique, il suffit d'exécuter le programme téléchargé.

Ensuite, rajoutons dans la variable d'environnement PATH de Windows, le chemin vers php.exe.... Pour cela il est possible d'utiliser un éditeur de variable d'environnement comme Rapid Environment Editor, qui rendra la tâche plus agréable (mais il n'y a rien d'obligatoire).
Pour cet exemple on aura donc PATH=C:\wamp\bin\php\php5.2.11.

Pour vérifier que tout est bien, ouvrez une ligne de commande (cmd.exe) tapez

> php -version

C'est bon ? la version de PHP s'affiche ? Moi j'obtiens ceci :

PHP 5.2.11 (cli) (built: Sep 16 2009 19:39:46)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies

...ce qui correspond bien à mon environnement. Ok, passons aux choses sérieuses. L'objectif est d'installer et de configurer :
Ce n'est pas au hasard que ces outils ont été choisis, mais bien parce qu'ils sont référencé dans la documentation de Yii concernant les tests.

2. Installer PEAR

Pour pouvoir installer PHPUnit, il faut avant tout avoir installé PEAR.
L'installation de PEAR se fait depuis la ligne de commande. Placez vous dans le répertoire PEAR (C:\wamp\bin\php\php5.2.11\PEAR) puis entrez la commande suivante :

> php -d phar.require_hash=0 go-pear.phar

La programme d'installation de PEAR vous propose alors les répertoires par défaut dans lesquels seront copiés ses différents composants. Par défaut, tout ce qui va être installé, le sera dans le répertoire courant, et c'est bien comme ça.
Si vous souhaitez changer de répertoire, sachez que l'installateur de PEAR n'aime pas du tout les noms de dossier contenant des espaces.



ATTENTION : si vous aviez déjà installé PEAR sur cette machine, mais dans un autre répertoire, vous devres prendre bien soin de supprimer les variables d'environnement PEAR, et de relancer la machine.
Lorsque les téléchargements sont terminés, j'autorise la modification automatique du php.ini (modification du include_path) : l'installation se termine. A la racine du répertoire d'installation, le fichier PEAR_ENV.reg a été créé. Il contient des clefs de registres définissant les différents répertoires de PEAR. Double-cliquer sur ce fichier afin d'ajouter ces valeurs à la base de registre.

Dernier point : rajouter le nom du répertoire d'installation (C:\wamp\bin\php\php5.2.11\PEAR) dans le PATH Windows. Le script PEAR.bat est désormais accessible depuis n'importe où. Pour vérifier que tout est en ordre tapez :

> pear -help

...et normalement, l'aide en ligne de PEAR s'affiche.

ouf, première étape terminée ! ... enfin presque. Pour être complétement sûr que la toute dernière version de PEAR est installée, on peut demander de mettre à jour PEAR. Cela peut être nécessaire si par la suite, lors de l'installation de PHPUnit, un message d'erreur vous informe que le PEAR Installer que vous utilisez, n'est pas la dernière version.

> pear upgrade pear
Cette fois c'est bon, on peut passer à la suite.

3. PHPUnit

A partir d'une installation PEAR à jour, et d'un environnement correctement configuré (en particulier concernant les PATH), l'installation de PHPUnit est hyper simple. Depuis la ligne de commande, tapez :

> pear channel-discover pear.phpunit.de
Adding Channel "pear.phpunit.de" succeeded
Discovery of channel "pear.phpunit.de" succeeded

> pear install phpunit/PHPUnit
Unknown remote channel: pear.symfony-project.com
Did not download optional dependencies: pear/Image_GraphViz,pear/Log, channel://pear.symfony-project.com/YAML, use --alldeps to download automatically
phpunit/PHPUnit can optionally use package "pear/Image_GraphViz" (version >= 1.2.1)
phpunit/PHPUnit can optionally use package "pear/Log"
phpunit/PHPUnit can optionally use package "channel://pear.symfony-project.com/YAML" (version >= 1.0.2)
phpunit/PHPUnit can optionally use PHP extension "soap"
phpunit/PHPUnit can optionally use PHP extension "xdebug" (version >= 2.0.5)
downloading PHPUnit-3.4.15.tgz ...
Starting to download PHPUnit-3.4.15.tgz (255,036 bytes)
.....................................................done: 255,036 bytes
install ok: channel://pear.phpunit.de/PHPUnit-3.4.15

Là c'est bon. Vous devriez trouver un répertoire PHPunit dans le répertoire C:\wamp\bin\php\php5.2.11\PEAR\pear. Si vous tapez phpunit depuis la ligne de commande, l'aide de phpunit s'affiche! C'est pas super ?
En cas d'erreur, lisez bien les messages qui apparaissent durant l'installation de PHPUnit. En particulier il se peut que certaines extension PHP indispensables (comme curl par exemple) soient manquantes, ou plus précisément, ne soit pas activées. Dans ce cas, rendez-vous dans le fichier php.ini correspondant, pour activation. Relancez ensuite l'installation.
Une autre cause possible d'erreur concerne la version de PHP qui doit correspondre à la version de PHPUnit que vous installez. Sur cette page, vous trouverez toutes les versions de php unit disponible. Pour installer la version PHPUnit 3.4.15 vous taperez :

pear install --alldeps phpunit/PHPUnit-3.4.15

L'option -alldeps permet d'installer également les dépendances...

4. XDEBUG


L'installation de cette extension PHP n'est pas obligatoire, mais elle est bien utile si vous voulez que PHPUnit soit capable de générer des rapports de couverture de code, lors de vos tests unitaires. Ces rapports de couverture de code (code coverage) existent en différent format, dont le HTML, et permet de voir facilement quelles sont les portions de code qui ont été testées, et celles qui ont été oubliées.
  • Téléchargez la DLL correspondant à votre version de PHP. Dans notre cas, avec PHP 5.2.11 nous avons le choix entre plusieurs version. On va choisir XDebug 2.1.0 - 5.2 VC6 (32 bit). Pourquoi ? ... parce que ! Si vous utilisez PHP 5.3.x, vous choisirez un fichier dont le nom commence par 5.3. C'est astucieux, mais pas évident au début.
  • copiez la DLL dans le répertoire ext de PHP (avec les autres extensions)
  • modifier le fichier php.ini présent dans C:\wamp\bin\php\php5.2.11 (et pas celui utilisé par apache)
A la fin du fichier C:\wamp\bin\php\php5.2.11\php.ini, rajoutez :

[XDebug]
zend_extension_ts=C:/wamp/bin/php/php5.2.11/ext/php_xdebug-2.1.0-5.2-vc6.dll
xdebug.remote_enable=true
xdebug.remote_host=localhost
xdebug.remote_port=10000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir=C:/temp/xdebug


ATTENTION : si vous utilisez un version de PHP 5.3.x la syntaxe n'est pas la même. Remplacez zend_extension_ts par zend_extension (plus de 'ts'). En cas de problème, allez jeter un oeil à la documentation ... si vous êtes anglophone !

XDebug sera disponible lors de l'appel à PHP depuis la ligne de commande, mais pas depuis Apache. Si vous voulez en profiter pour installer XDebug pour qu'il soit accessible depuis Apache, il suffit de rajouter les lignes ci-dessus dans le fichier php.ini utilisé par Apache. Dans notre exemple il s'agit du fichier C:\wamp\bin\apache\Apache2.2.11\bin\php.ini

Pour vérifier que XDebug est bien installé dans le serveur Apache relancer-le et affichez un phpinfo(). Vous devriez y trouver un section décrivant la configuration actuelle de XDebug.
Pour vérifier que XDebug est correctement installé dans PHP en ligne de commande ... ben je sais pas comment faire, là tout de suite. On verra après ok ?
..allez !! , c'est presque fini !

5. Selenium

Selenium permet de créer des tests fonctionnels. En gros, une fois correctement installé, la suite d'outils Selenium vous permettra :
  • d'enregistrer des actions sur vos pages web (cliquer ici, cliquer là, remplir en formulaire,etc ...)
  • de rejouer automatiquement ces actions afin de les valider sur différents navigateurs
Rendez-vous à la page de téléchargement, et récupérez Selenium RC ainsi que Selenium IDE , une extensions Firefox bien utile pour enregistrer des tests d'interface Web.

Installer Selenium RC
Selenium RC est fourni sous la forme d'un fichier ZIP contenant tout plein de répertoires et de fichiers. Nous allons tout décompresser dans le répertoire C:\selenium-remote-control-1.0.3. Comme nous sommes en présence d'une application Java, j'espère que vous avez mis à jour votre environnement Java, sinon c'est le moment.

Pour vérifier que Java est disponible dans votre environnement, tapez la commande suivante :

> java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)

Comme vous le voyez, chez moi c'est la version 1.6.0_20 qui est installé. Le minimum requis pour Selenium est la 1.5 .. donc je suis à l'aise sur le coup ! Pour lancer le serveur Selenium tapez :

> java -jar C:\selenium-remote-control-1.0.3\selenium-server-1.0.3\selenium-server.jar

Par la suite vous pourrez créer le petit fichier bat qui va bien ... Pour arrêter le serveur, c'est Ctrl+C.
A noter : il existe une distribution beaucoup plus conviviale de Selenium RC, c'est Sauce RC. J'ai essayé et c'est pas mal, beaucoup moins roots que l'original. SauceRC propose une belle interface depuis votre navigateur favori, pour lancer/stopper le serveur Selenium ... enfin, je vous laisse vous faire votre idée.

Installer Selenium IDE
C'est trop simple : lancez Firefox et glissez le fichier selenium-ide-1.0.7.xpi téléchargé, dans la fenêtre principale de Firefox. Ensuite, laissez vous guider. En 30 secondes le Selenium IDE est prêt (c'est juste une extension FF).
Ensuite, lancez l'IDE depuis le menu Outils de Firefox et enregistrez vos actions sur n'importe quelle page HTML de n'importe quel site. Vous pourrez rejouer vos actions, et les exporter dans différents format dont le plus intéressant pour nous est PHP.

5. Conclusion

Tout est prêt ... ya plus qu'à !
La suite va consister à configurer Yii pour les tests unitaires (PHPUnit) et fonctionnels (Selenium) et bien sûr à les développer Alors en attendant un prochain article, vous pouvez dés à présent suivre la documentation Yii sur le sujet.