Introduction
Le framework symfony est un projet Open-Source depuis plus de quatre ans et est devenu l'un des plus populaires framework PHP grâce à ses excellentes fonctionnalités et sa très bonne documentation.
Ce livre décrit la création d'une application web avec le framework symfony, étape par étape, des spécifications à la mise en œuvre. Il s'adresse aux débutants qui veulent apprendre symfony, comprendre comment il fonctionne, et aussi se renseigner sur les meilleures pratiques de développement Web.
L'application à réaliser aurait pu être un autre moteur de blog. Mais nous souhaitons utiliser symfony sur un projet utile. L'objectif est de démontrer que symfony peut être utilisé pour développer des applications professionnelles avec style et peu d'effort.
Nous tiendrons le contenu du projet secret pour un autre jour car nous avons déjà beaucoup à faire aujourd'hui. Cependant, donnons-lui un nom : Jobeet.
Chaque chapitre de ce livre est fait pour durer entre une et deux heures, et sera l'occasion d'apprendre symfony en codant un vrai site web, du début à la fin. Chaque jour, de nouvelles fonctionnalités seront ajoutées à l'application, et nous allons profiter de ce développement pour vous présenter de nouvelles fonctionnalités de symfony, ainsi que les bonnes pratiques dans le développement web de symfony.
Ce livre est différent
Rappelez-vous les premiers jours de PHP4. Ah, la Belle Epoque ! PHP est l'un des premiers langages dédiés au web et l'un des plus facile à apprendre.
Mais comme les technologies du web évoluent à un rythme très rapide, les développeurs Web doivent se tenir au courant sur les dernières meilleures pratiques et les outils. La meilleure façon d'apprendre est bien sûr par la lecture des blogs, des tutoriels et des livres. Nous avons lu beaucoup d'entre eux, qu'ils soient écrits pour PHP, Python, Java, Ruby ou Perl, et beaucoup d'entre eux nous laisse sur notre faim lorsque l'auteur commence à donner des morceaux de codes à titre d'exemples.
Vous êtes sans doute habitué à lire des avertissements du genre:
«Pour une application réelle, n'oubliez pas d'ajouter la validation et la manipulation d'erreur appropriée.»
Ou
«La sécurité est laissée en exercice au lecteur.»
Ou
«Vous aurez bien sûr besoin d'écrire des tests.»
Pardon ? Ces choses sont sérieuses. Ils sont peut-être la partie la plus importante de tout morceau de code. Et en tant que lecteur, on vous laisse seuls. Sans que ces préoccupations soient prises en compte, les exemples sont beaucoup moins utiles. Vous ne pouvez pas les utiliser comme un bon point de départ. C'est très grave ! Pourquoi ? Parce que la sécurité, la validation, le traitement des erreurs et les tests, pour n'en nommer que quelques-uns, sont importants pour avoir un bon code.
Dans ce livre, vous ne verrez jamais des déclarations car nous allons écrire des tests, la gestion d'erreur, le code de validation, et soyez sûr que nous développons une application sécurisée. C'est parce que symfony est sur??? le code, mais également sur les meilleures pratiques et comment développer des applications professionnelles pour l'entreprise. Nous serons en mesure de se permettre ce luxe, car symfony fournit tous les outils nécessaires pour coder ces aspects aisément sans écrire trop de code.
La validation, la manipulation d'erreur, la sécurité, et les tests sont des citoyens de première classe dans symfony, ainsi cela ne nous prendra pas trop de temps à expliquer. Ce n'est là qu'une des nombreuses raisons d'utiliser un framework pour la «vie réelle» des projets.
Tout le code que vous lirez dans ce livre est un code que vous pourriez utiliser pour un projet réel. Nous vous encourageons à copier/coller des bouts de code ou de voler des morceaux entiers.
Qu'allons nous faire aujourd'hui ?
Nous n'allons pas écrire du code PHP aujourd'hui. Mais même sans écrire une seule ligne de code, vous commencerez à comprendre les avantages de l'utilisation d'un framework comme symfony, juste en démarrant un nouveau projet.
L'objectif de ce chapitre est d'installer l'environnement de développement et afficher une page de l'application dans un navigateur web. Cela comprend l'installation de symfony, la création d'une application et la configuration du serveur web.
Comme ce livre met principalement l'accent sur le framework symfony, nous supposerons que vous avez déjà une solide connaissance en PHP 5 et en programmation orientée objet.
Prérequis
Avant d'installer symfony, vous devez vérifier que votre ordinateur a tout installé et configuré correctement. Prenez le temps de lire consciencieusement ce chapitre et de suivre toutes les étapes nécessaires pour vérifier votre configuration, car elle peut sauver votre journée plus loin sur le parcours.
Logiciel tiers
Tout d'abord, vous devez vérifier que votre ordinateur dispose d'un environnement de travail convivial pour le développement web. Au minimum, vous avez besoin d'un serveur web (Apache, par exemple), un moteur de base de données (MySQL, PostgreSQL, SQLite, ou tout autre moteur de base de PDO-compatible), et PHP 5.2.4 ou ultérieur.
Interface de ligne de commande
Le framework symfony est livré avec un outil de ligne de commande qui permet d'automatiser
beaucoup de travail pour vous. Si vous êtes un utilisateur d'un OS de type Unix, vous vous sentirez
comme chez vous. Si vous utilisez un système Windows, il fonctionne également très bien, mais il vous
suffira de taper quelques commandes à l'invite de cmd
.
note
Les commandes shell Unix peuvent être pratiques dans un environnement Windows.
Si vous souhaitez utiliser des outils comme tar
, gzip
ou grep
sous Windows, vous
pouvez installer Cygwin. Les aventureux peuvent aussi essayer les
Windows Services for Unix
de Microsoft.
Configuration de PHP
Comme les configurations PHP peuvent beaucoup varier d'un OS à l'autre, ou même entre les différentes distributions Linux, vous devez vérifier que votre configuration de PHP satisfait aux exigences minimales de symfony.
Premièrement, assurez-vous que PHP 5.2.4 au minimum est installé en utilisant la
fonction intégrée phpinfo()
ou en exécutant php -v
en ligne de commande. Soyez
conscient que sur certaines configurations, vous pouvez avoir deux versions différentes de PHP
d'installées : l'une pour la ligne de commande, et une autre pour le web.
Ensuite, téléchargez le script de vérification de la configuration de symfony à l'adresse suivante :
http://sf-to.org/1.4/check.php
Enregistrez le script quelque part sous votre répertoire racine web.
Lancez le script de vérification de configuration en ligne de commande :
$ php check_configuration.php
S'il y a un problème avec votre configuration PHP, la sortie de la commande va vous donner des conseils sur ce qu'il faut corriger et comment le réparer.
Vous devez également exécuter la vérification à partir d'un navigateur et corriger les problèmes qu'elle
pourrait découvrir. Car PHP peut avoir un fichier de configuration php.ini
distinct
pour ces deux environnements, avec des réglages différents.
note
N'oubliez pas de supprimer le fichier de votre répertoire racine web par la suite.
Installation de symfony
L'initialisation du répertoire du projet
Avant d'installer symfony, vous devez d'abord créer un répertoire qui sera l'hôte de tous les fichiers liés à Jobeet :
$ mkdir -p /home/sfprojects/jobeet $ cd /home/sfprojects/jobeet
Ou sous Windows:
c:\> mkdir c:\development\sfprojects\jobeet c:\> cd c:\development\sfprojects\jobeet
note
Les utilisateurs de Windows sont invités à exécuter symfony et mettre en place leur nouveau
projet dans un chemin qui ne contient pas d'espaces.
Évitez d'utiliser le répertoire Documents and Settings
, y compris n'importe où
sous Mes documents
.
tip
Si vous créez le répertoire du projet symfony sous le répertoire racine web, vous n'aurez pas besoin de configurer votre serveur web. Bien sûr, pour les environnements de production, nous vous conseillons fortement de configurer votre serveur web, comme expliqué dans la section de configuration du serveur web.
Choix de la version de symfony
Maintenant, vous devez installer symfony. Comme le framework symfony dispose de plusieurs versions stables, vous devez choisir celle que vous souhaitez installer en lisant la page d'installation sur le site de symfony.
Ce livre suppose que vous voulez installer symfony 1.3 ou symfony 1.4.
Choix du lieu d'installation de symfony
Vous pouvez installer symfony globalement sur votre machine, ou l'intégrer à chacun de vos projets. Cette dernière est celle qui est recommandée car les projets seront alors totalement indépendants les uns des autres. La mise à jour de votre symfony installé localement ne cassera pas tous vos projets de manière inattendue. Cela signifie que vous pourrez avoir des projets sur les différentes versions de symfony, et les mettre à jour comme bon vous semble.
Comme bonne pratique, beaucoup de gens installent les fichiers du framework symfony dans le
répertoire lib/vendor
du projet. Donc, premièrement, créez ce répertoire :
$ mkdir -p lib/vendor
Installation de symfony
Installation depuis une archive
Le moyen le plus simple d'installer symfony est de télécharger l'archive pour la version voulue sur le site de symfony. Allez à la page d'installation pour la version que vous venez de choisir, symfony 1.4 par exemple.
Sous la section "Source Download", vous trouverez l'archive au format .tgz
ou .zip
. Téléchargez l'archive, mettez-la sous le répertoire lib/vendor/
créé précédemment, décompressez-la, et renommez le répertoire en symfony
:
$ cd lib/vendor $ tar zxpf symfony-1.4.0.tgz $ mv symfony-1.4.0 symfony $ rm symfony-1.4.0.tgz
Sous Windows, décompressez le fichier zip qui peut être réalisé en utilisant l'explorateur de Windows.
Après avoir renommé le répertoire en symfony
, il devrait y avoir une structure
de répertoire similaire à c:\dev\sfprojects\jobeet\lib\vendor\symfony
.
Installation depuis Subversion (recommandée)
Si vous utilisez Subversion, il est même préférable d'utiliser la propriété svn:externals
pour incorporer symfony dans votre projet dans le répertoire lib/vendor/
directory :
$ svn pe svn:externals lib/vendor/
note
L'importation de votre projet dans un nouveau dépôt de Subversion est expliqué à la fin de ce chapitre.
Si tout va bien, cette commande va lancer votre éditeur favori pour vous donner la possibilité de configurer les sources extérieures de Subversion.
tip
Sous Windows, vous pouvez utiliser des outils comme TortoiseSVN(http://tortoisesvn.net/) pour tout faire sans avoir besoin d'utiliser la console.
Si vous êtes conservateur, attachez votre projet à une version spécifique (un tag de subversion) :
symfony http://svn.symfony-project.com/tags/RELEASE_1_4_0
Chaque fois qu'une nouvelle version sortira (comme annoncé sur le blog de symfony), vous devrez modifier l'URL vers la nouvelle version.
Si vous souhaitez la version la plus avancée mais habituellement la plus risquée, utilisez la branche 1.4 :
symfony http://svn.symfony-project.com/branches/1.4/
L'utilisation de la branche permet à votre projet de bénéficier de corrections de bogues automatiquement
chaque fois que vous exécutez un svn update
.
Vérification de l'installation
Maintenant que symfony est installé, vérifiez que tout fonctionne en utilisant la
ligne de commande de symfony pour afficher la version de symfony (notez la majuscule V
) :
$ cd ../.. $ php lib/vendor/symfony/data/bin/symfony -V
Sur Windows:
c:\> cd ..\.. c:\> php lib\vendor\symfony\data\bin\symfony -V
tip
Si vous êtes curieux de savoir ce que cet outil en ligne de commande peut faire pour vous, tapez
symfony
pour lister les options et les tâches disponibles :
$ php lib/vendor/symfony/data/bin/symfony
Sur Windows:
c:\> php lib\vendor\symfony\data\bin\symfony
La ligne de commande symfony est la meilleure amie du développeur. Elle fournit de nombreux utilitaires, qui permettent d'améliorer votre productivité au quotidien sur des activités comme le nettoyage du cache, la génération de code et bien plus encore.
Installation du projet
Dans symfony, les applications partageant le même modèle de données sont regroupées dans des projets. Pour la plupart des projets, vous avez deux applications différentes : un frontend et un backend.
Création du projet
Depuis le répertoire sfprojects/jobeet
, exécutez la tâche symfony generate:project
pour créer effectivement le projet symfony :
$ php lib/vendor/symfony/data/bin/symfony generate:project jobeet --orm=Propel
Sur Windows:
c:\> php lib\vendor\symfony\data\bin\symfony generate:project jobeet --orm=Propel
La tâche generate:project
génère la structure par défaut des répertoires et
les fichiers nécessaires pour un projet symfony :
Répertoire | Description |
---|---|
apps/ |
Accueille toutes les applications du projet |
cache/ |
Les fichiers mis en cache par le framework |
config/ |
Les fichiers de configuration du projet |
lib/ |
Les bibliothèques et les classes du projet |
log/ |
Les fichiers log du framework |
plugins/ |
Les plugins installés |
test/ |
Les fichiers de test unitaire et fonctionnel |
web/ |
Le répertoire racine Web (voir ci-dessous) |
note
Pourquoi symfony génère beaucoup de fichiers ? Un des principaux avantages d'un framework full-stack est de normaliser vos développements. Grâce à la structure par défaut des fichiers et des répertoires de symfony, tout développeur ayant une certaine connaissance de symfony peut prendre en charge la maintenance d'un projet symfony. En quelques minutes, il sera capable de plonger dans le code, de corriger des bugs, et d'ajouter de nouvelles fonctionnalités.
La tâche generate:project
a également créé un raccourci symfony
dans le
répertoire racine du projet pour diminuer le nombre de caractères que vous allez écrire
lors de l'exécution d'une tâche.
Ainsi, à partir de maintenant, au lieu d'utiliser le chemin complet pour le programme
symfony, vous pouvez utiliser le raccourci symfony
.
Création de l'application
Maintenant, créez l'application frontend en exécutant la tâche generate:app
:
$ php symfony generate:app frontend
tip
Parce que le raccourci symfony est exécutable, les utilisateurs Unix peuvent remplacer toutes
les occurrences de 'php symfony
' par './symfony
' à partir de maintenant.
Sur Windows vous pouvez copier le fichier 'symfony.bat
' vers votre projet et utilisez
'symfony
' à la place de 'php symfony
' :
c:\> copy lib\vendor\symfony\data\bin\symfony.bat .
Basé sur le nom de l'application donné en argument, la tâche generate:app
crée par défaut la structure du répertoire nécessaire à l'application sous le
répertoire apps/frontend/
:
Répertoire | Description |
---|---|
config/ |
Les fichiers de configuration de l'application |
lib/ |
Les bibliothèques et les classes de l'application |
modules/ |
Le code de l'application (MVC) |
templates/ |
Les fichiers template globaux |
Droits sur les répertoires structurés
Avant d'essayer d'accéder à votre projet nouvellement créé, vous devez configurer l'écriture
sur les répertoires cache/
et log/
à des niveaux appropriés,
afin que votre serveur web puisse écrire dedans :
$ chmod 777 cache/ log/
Configuration du serveur Web : la pire méthode
Si vous avez créé le répertoire du projet quelque part dans le répertoire racine web de votre serveur web, vous pouvez déjà accéder au projet dans un navigateur Web.
Bien sûr, comme il n'y a pas de configuration, il est très rapide à mettre en place, mais essayez
d'accéder au fichier config/databases.yml
dans votre navigateur pour comprendre les
conséquences négatives d'une telle attitude paresseuse. Si l'utilisateur sait que votre site est
développé avec symfony, il aura accès à un grand nombre de fichiers sensibles.
N'utilisez jamais cette configuration sur un serveur de production, et lisez la section suivante pour savoir comment configurer votre serveur web correctement.
Configuration du serveur Web : La méthode sécurisée
Une bonne pratique web est de mettre sous le répertoire racine du site Web que
les fichiers qui doivent être accessibles par un navigateur web, comme les feuilles de style, les Javascripts et
les images. Par défaut, nous vous recommandons de stocker ces fichiers sous le répertoire web/
du projet symfony et ses sous-répertoires.
Si vous jetez un œil sur ce répertoire, vous trouverez plusieurs sous-répertoires pour
les ressources web (css/
et images/
) et deux fichiers de contrôleur frontal. Les
contrôleurs frontaux sont seulement des fichiers PHP qui doivent être sous le répertoire
racine web. Tous les autres fichiers PHP peuvent être cachés au navigateur, c'est une bonne
idée en matière de sécurité.
Configuration du serveur Web
Maintenant il est temps de changer votre configuration d'Apache, pour rendre le nouveau projet accessible au monde.
Localisez et ouvrez le fichier de configuration httpd.conf
et ajoutez la configuration
suivante à la fin :
# Soyez sûr d'avoir seulement cette ligne une fois dans votre configuration NameVirtualHost 127.0.0.1:8080 # C'est la configuration pour votre projet Listen 127.0.0.1:8080 <VirtualHost 127.0.0.1:8080> DocumentRoot "/home/sfprojects/jobeet/web" DirectoryIndex index.php <Directory "/home/sfprojects/jobeet/web"> AllowOverride All Allow from All </Directory> Alias /sf /home/sfprojects/jobeet/lib/vendor/symfony/data/web/sf <Directory "/home/sfprojects/jobeet/lib/vendor/symfony/data/web/sf"> AllowOverride All Allow from All </Directory> </VirtualHost>
note
L'alias /sf
vous donne accès à des images et des fichiers JavaScript nécessaire
pour afficher correctement les pages symfony par défaut et la barre d'outils web de débogage.
Sur Windows, vous devez remplacer la ligne Alias
avec quelque chose comme :
Alias /sf "c:\dev\sfprojects\jobeet\lib\vendor\symfony\data\web\sf"
Et /home/sfprojects/jobeet/web
doit être remplacé par :
c:\dev\sfprojects\jobeet\web
Cette configuration permet Apache d'écouter le port 8080 sur votre machine, de sorte que le site web sera accessible à l'adresse suivante :
http://~localhost~:8080/
Vous pouvez changer 8080
par un autre nombre, mais favorisez les nombres plus grand que 1024
car
ils ne nécessitent pas de droits administrateurs.
Tester la nouvelle configuration
Redémarrez Apache, et vérifiez que vous avez maintenant accès à la nouvelle application en
ouvrant un navigateur et en tapant http://localhost:8080/index.php/
, ou
http://www.myproject.com.localhost/index.php/
en fonction de la configuration d'Apache que
vous avez choisi dans la section précédente.
tip
Si vous avez le module Apache mod_rewrite
installé, vous pouvez retirer
une partie de l'URL : index.php/
. Ceci est possible grâce à la
règle de reroutage configuré dans le fichier web/.htaccess
.
Vous devriez également essayer d'accéder à l'application dans l'environnement de développement (voir la section suivante pour plus d'informations sur les environnements). Tapez l'adresse URL suivante :
http://www.jobeet.com.localhost/frontend_dev.php/
La barre d'outils web de débogage devrait apparaître dans le coin supérieur droit, incluant
de petites icônes, prouvant que la configuration de votre alias sf/
est correct.
note
La configuration est un peu différente si vous voulez faire tourner symfony sur un serveur IIS dans un environnement de Windows. Vous trouverez la façon de le configurer dans le tutoriel dédié.
Les environnements
Si vous regardez le répertoire web/
, vous trouverez deux fichiers PHP :
index.php
et frontend_dev.php
. Ces fichiers sont appelés contrôleurs
frontaux; toutes les requêtes de l'application se font par leur intermédiaire. Mais pourquoi
nous avons deux contrôleurs frontaux pour chaque application ?
Les deux fichiers pointent sur la même application mais pour des environnements différents. Lorsque vous développez une application, sauf si vous développez directement sur le serveur de production, vous avez besoin de plusieurs environnements :
L'environnement de développement : C'est l'environnement utilisé par les développeurs Web quand ils travaillent sur l'application pour ajouter de nouvelles fonctionnalités, corriger des bugs, ...
L'environnement de test : Cet environnement est utilisé pour tester automatiquement l'application.
L'environnement de qualité : Cet environnement est utilisé par le client pour tester l'application et les bogues ou les fonctionnalités manquantes.
L'environnement de production : C'est l'environnement où interagissent les utilisateurs finaux
Qu'est ce qui rend un environnement unique ? Dans l'environnement de développement par exemple, l'application doit se connecter à tous les détails d'une requête afin de faciliter le débogage, mais le système de cache doit être désactivé de façon que tous les changements apportés au code soient pris en compte sans tarder. Ainsi, l'environnement de développement doit être optimisé pour le développeur. Le meilleur exemple est certainement lorsqu'une exception se produit. Pour aider le développeur à déboguer le problème plus rapidement, symfony affiche l'exception avec toutes les informations qu'elle a sur la requête courante dans le navigateur :
Par contre sur l'environnement de production, la couche du cache doit être activé, et bien entendu, l'application doit afficher les messages d'erreurs à la place des exceptions. Ainsi, l'environnement de production doit être optimisé pour la performance et l'expérience utilisateur.
tip
Si vous ouvrez les fichiers des contrôleurs frontaux, vous verrez que leur contenu est le même, sauf pour la configuration de l'environnement :
// web/index.php <?php require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php'); $configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false); sfContext::createInstance($configuration)->dispatch();
La barre d'outils de débogage Web est également un excellent exemple de l'utilisation de l'environnement. Elle est présente sur toutes les pages dans l'environnement de développement et vous donne accès à un grand nombre d'informations en cliquant sur les différents onglets : la configuration de l'application actuelle, les journaux de la requête actuelle, les instructions SQL exécutées sur le moteur de base de données, des informations sur la mémoire, et l'heure.
Subversion
C'est une bonne pratique d'utiliser le contrôle de version des sources lors du développement d'une application web. En utilisant un contrôle de version des sources, cela nous permet de :
- travailler en toute confiance
- revenir à une version précédente si un changement casse quelquechose
- permettre à plusieurs personnes de travailler efficacement sur le projet
- avoir accès à toutes les versions successives de l'application
Dans cette section, nous décrirons comment utiliser Subversion avec symfony. Si vous utilisez un autre outil de contrôle de code source, il doit être assez facile d'adapter ce que nous décrivons pour Subversion.
Nous supposons que vous avez déjà accès à un serveur Subversion et que vous pouvez y accéder via HTTP.
tip
Si vous ne disposez pas d'un serveur Subversion à votre disposition, vous pouvez créer un dépôt gratuit sur Google Code ou tapez simplement "free subversion repository" dans Google pour avoir beaucoup plus d'options.
Tout d'abord, créer un dépôt pour le projet jobeet sur le serveur de dépôt :
$ svnadmin create /path/to/jobeet/repository
Sur votre machine, créez la structure de répertoires de base :
$ svn mkdir -m "creer la structure de repertoires par defaut" http://svn.example.com/jobeet/trunk http://svn.example.com/jobeet/tags http://svn.example.com/jobeet/branches
Et faites un checkout du répertoire vide trunk/
:
$ cd /home/sfprojects/jobeet $ svn co http://svn.example.com/jobeet/trunk/ .
Ensuite, supprimez le contenu des répertoires cache/
et log/
car nous ne
voulons pas les mettre dans le dépôt.
$ rm -rf cache/* log/*
Maintenant, assurez-vous de mettre les permissions d'écriture sur les répertoires du cache et des journaux aux niveaux appropriés afin que votre serveur web puisse écrire dedans :
$ chmod 777 cache/ log/
Maintenant, importer tous les fichiers et répertoires :
$ svn add *
Comme nous ne voudrons jamais faire de commit des fichiers situés dans les répertoires
cache/
et log/
, vous devez spécifier une liste à ignorer :
$ svn propedit svn:ignore cache
L'éditeur de texte par défaut configuré dans SVN devrait se lancer. Subversion doit ignorer tout le contenu de ce répertoire :
*
Sauvegardez et quittez. Vous avez terminé.
Répétez la procédure pour le répertoire log/
:
$ svn propedit svn:ignore log
Et entrez :
*
Enfin, valider ces modifications dans le dépôt :
$ svn import -m "fait l import initial" . http://svn.example.com/jobeet/trunk
tip
Les utilisateurs de Windows peuvent utiliser l'excellent client TortoiseSVN pour gérer leur dépôt Subversion.
Conclusion
Ce premier chapitre s'achève ici. Bien que nous n'ayons pas encore commencé à parler de symfony, nous avons cependant créé un environnement de développement solide. Nous avons aussi évoqué quelques bonnes pratiques du développement web, et nous sommes à présent prêts à développer.
Le chapitre suivant dévoilera les fonctionnalités de la future application et détaillera les besoins fonctionnels et techniques à satisfaire dans Jobeet.
This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License license.